MySql数据库备份的⼏种⽅式
mysqldump⼯具备份
备份整个数据库
$> mysqldump -u root -h host -p dbname > backdb.sql
备份数据库中的某个表
$> mysqldump -u root -h host -p dbname tbname1, tbname2 > backdb.sql
备份多个数据库
$> mysqldump -u root -h host -p --databases dbname1, dbname2 > backdb.sql
备份系统中所有数据库
$> mysqldump -u root -h host -p --all-databases > backdb.sql
直接复制整个数据库⽬录(对于InnoDB存储引擎不适⽤)备份
windowns: installpath/mysql/data
linux: /var/lib/mysql
在复制前需要先执⾏如下命令:
MYSQL> LOCK TABLES;
# 在复制过程中允许客户继续查询表,
MYSQL> FLUSH TABLES;
# 将激活的索引页写⼊硬盘。
mysqlhotcopy⼯具备份
备份数据库或表最快的途径,只能运⾏在数据库⽬录所在的机器上,并且只能备份MyISAM类型的表。mysql下载odbc失败
要使⽤该备份⽅法必须可以访问备份的表⽂件。
$> mysqlhotcopy -u root -p dbname /path/to/new_directory;
#将数据库复制到new_directory⽬录。
mysql命令导⼊sql⽂件还原
$> mysql -u root -p [dbname] < backup.sql
# 执⾏前需要先创建dbname数据库,如果backup.sql是mysqldump创建的备份⽂件则执⾏是不需要dbname。
MYSQL> source backup.sql;
# 执⾏source命令前需要先选择数据库。
直接复制数据库⽬录还原
注:该⽅式必须确保原数据库和待还原的数据库主版本号⼀致,并且只适⽤于MyISAM引擎的表。
1. 关闭mysql服务。
2. 将备份的⽂件或⽬录覆盖mysql的data⽬录。
3. 启动mysql服务。
4. 对于linux系统,复制完⽂件后需要将⽂件的⽤户和组更改为mysql运⾏的⽤户和组。
mysqlhotcopy快速恢复
停⽌mysql服务,将备份数据库⽂件复制到存放数据的位置(mysql的data⽂件夹),重先启动mysql服务即可(可能需要指定数据库⽂件的所有者)。
$> cp -R /usr/backup/test /usr/local/mysql/data
# 如果恢复的数据库已经存在,则使⽤DROP语句删除已经存在的数据库之后,恢复才能成功,还需要保证数据库版本兼容。
相同版本数据库之间迁移
$> mysqldump -h www.abc -uroot -p password dbname |
$> mysqldump -h www.bcd -uroot -p password
# 将服务器www.abc的数据库dbname迁移到服务器www.bcd的相同版本数据库上。
不同版本的mysql数据库之间的迁移
备份原数据库。
卸载原数据库。
安装新数据库。
在新数据库中还原备份的数据库数据。
数据库⽤户访问信息需要备份mysql数据库。
默认字符集问题,MySQL4.x中使⽤latin1作为默认字符集,mysql5.x使⽤utf8作为默认字符集。如果有中⽂数据需要对默认字符集进⾏更改。
不同数据库之间的迁移
MyODBC⼯具实现MySQL和SQL Server之间的迁移。
MySQL Migration Toolkit⼯具。
表的导出和导⼊
SELECT ...... INTO OUTFILE 导出⽂本⽂件,该⽅法只能导出到数据库服务器上,并且导出⽂件不能已存在。
MYSQL> SELECT ...... INTO OUTFILE filename [OPTIONS]
MYSQL> SELECT * FROM test.person INTO OUTFILE "C:\";
# 将表person⾥的数据导⼊为⽂本⽂件。
mysqldump⽂件导出⽂本⽂件(和INTO OUTFILE不⼀样的是该⽅法所有的选项不需要添加引号)
$> mysqldump -T path -u root -p dbname [tables] [OPTIONS]
# -T参数表明导出⽂本⽂件。path导出数据的⽬录。
$> mysqldump -T C:\test person -u root -p
# 将test表中的person表导出到⽂本⽂件。执⾏成功后test⽬录下会有两个⽂件,person.sql和
mysql命令导出⽂本⽂件
MYSQL> mysql -u root -p --execute="SELECT * FROM person;" test > C:\;
# 将test数据库中的person表数据导出到⽂本⽂件中。--vartical参数可以将⼀⾏分为多⾏显⽰。
MYSQL> mysql -u root -p --vartical --execute="SELECT * FROM person;" test > C:\;
# --html将表导出为html⽂件,--xml⽂件将表导出为xml⽂件
LOAD DATA INFILE导⼊⽂本⽂件
MYSQL> LOAD DATA INFILE '' INTO TABLE tablename [OPTIONS] [IGNORE number LINES];
# [IGNORE number LINES]表⽰忽略⾏数
MYSQL> LOAD DATA INFILE 'C:\' INTO TABLE test.person;
mysqlimport导⼊⽂本⽂件
$> mysqlimport -u root -p [OPSTONS]
# 导⼊的表名有⽂件名决定,导⼊数据之前表必须存在
$> mysqlimport -uroot -p test C:\
# 将数据导⼊到test数据库的person表中。
使⽤mysqlbinlog恢复数据
$> mysqlbinlog [option] filename | mysql -u user -p password
# filename为⼆进制⽇志⽂件,
$> mysqlbinlog --stop-date="2013-03-30 15:27:47" D:\MySQL\log\binlog\binlog.000008 | mysql -u root -p password
# 根据⽇志⽂件binlog.000008将数据恢复到2013-03-30 15:27:47以前的操作。
启动⼆进制⽇志
log-bin = path/filename #⽇志⽂件存储⽬录和⽂件名
expire_log_days = 10 #⽇志⾃动删除时间
max_binlog_size = 100M # ⽇志⽂件最⼤⼤⼩
查看⼆进制⽇志
MYSQL> SHOW VARIABLES LIKE 'log_%';
MYSQL> SHOW BINARY LOGS;
$> mysqlbinlog filename
# filename为⼆进制⽇志⽂件名。
删除⼆进制⽇志
MYSQL> RESET MASTER; #删除所有⼆进制⽇志
MYSQL> PURGE {MASTER | BINARY} LOGS TO 'log_name'; #删除⽂件编号⼩于log_name编号的⽂件
MYSQL> PURGE {MASTER | BINARY} LOGS BEFORE 'date'; #删除指定⽇期以前的⽂件暂时停⽌⼆进制⽇志(不需要重启mysql服务)
MYSQL> SET sql_log_bin = {0|1} #暂停或启动⼆进制⽇志。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。