使用mysqldump
备份数据库,我使用的mysql 语句
如下:
$ mysqldump -u root -p -h127.0.0.1 --single-transaction --master-data=1 --flush-logs --triggers --quick 【数据库名】 > 【目标数据名】
【mysqldump 参数】
- -u 用户名
- -p 密码
- -h 导出的数据库所在机器
- --single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。 - --master-data
在建立slave数据库的时候会用到,当这个参数的值为1的时候,mysqldump出来的文件就会包括CHANGE MASTER TO这个语句,CHANGE MASTER TO后面紧接着就是file和position的记录,file和position记录的位置就是slave从master端复制文件的起始位置。默认情 况下这个值是1,此处是可以方便的恢复replication的关键参数 - --flush-logs
为结束当前日志,生成新日志文件,重新生成的文件可以方便用来增量更新的恢复。
命令为:mysqlbinlog mysql-bin.xxxxxx… | mysql -u root -p - --triggers
导出触发器,如果不导出,则用--skip-triggers - --quik
该选项在导出大表时很有用,它强制 MySQLdump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。 - --opt
这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 MySQLdump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 MySQLdump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。
【结果】
导出的sql
中第一行可执行代码为:(不包括注释等其他信息)
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxxxxx', MASTER_LOG_POS=xxx;
【注意事项】
主服务器恢复数据时,可进行增量恢复:
mysqlbinlog mysql-bin.xxxxxx … | mysql -u root -p
从服务器执行导入
sql
时,要先stop slave
,导入完毕后,再start slave