环境
基于docker的mysql 5.7.26
mysqldump 使用
参数 | 说明 |
---|---|
-h | 指定IP |
-P | 指定端口 |
-u | 指定用户名 |
-p | 指定密码 |
-A | 备份所有表 |
-q | 备份的数据直接dump到标准输出,不经过buffer |
-B | 带上-B参数备份时,会加上建库语句, 可以直接还原,不用指定数据库 |
备份数据库到bak.sql
$ docker exec -it dc_mysql_1 bash
$ mysqldump -q -C \
-h127.0.0.1 -P3306 \
--single-transaction --flush-logs --master-data=2 \
-uroot -proot -B 库名 > ./bak.sql
从bak.sql恢复到mysql
mysql -uroot -proot < ./bak.sql
–master-data=1 会在备份文件中生成记录position位置的sql,未注释状态,多使用在建立主从的数据库中
–master-data=2 单纯为了记录备份时的二进制日志文件位置,sql呈显注释状态
–flush-logs 为结束当前日志,生成新日志文件
–single-transaction 当前会话事务隔离级别设置为"可重读"
–routines选项:表示备份时,存储过程和存储函数也会被备份。
–triggers选项:表示备份时,触发器会被备份。
–events选项:表示备份时,事件表会被备份。
mysql_8提示:
--master-data is deprecated and will be removed in a future version. Use --source-data instead.
一致性读:
在可重读(RR)级别下,开启事务 START TRANSACTION使用WITH CONSISTENT SNAPSHOT子句,相当前START TRANSACTION+SELECT,其它的DML操作不会影响到开启事务之前的数据.
该事务内获取到的数据与事务开始时间点一致
–single-transaction:
- 用于启动一个只读事务来备份数据,确保备份期间数据的一致性,适用于使用 InnoDB 存储引擎的表。
- 允许在备份过程中其他会话继续进行读写操作,降低对在线服务的影响。
- 事务一致性要求:
如果对备份数据的事务一致性有较高要求,即希望备份的数据反映的是某一特定时间点的数据库状态,那么无论表大小如何,都应考虑使用 --single-transaction。这是因为该选项利用事务隔离性确保备份过程中不会包含备份开始之后其他会话提交的新事务。 - 实时性与服务可用性:
如果备份操作需要在业务高峰期进行,或者对备份期间数据库服务的可用性、响应速度有严格要求,那么使用 --single-transaction 尤其重要。因为它避免了对表进行全局锁定,允许其他会话在备份过程中继续进行读写操作,从而降低对在线服务的影响
增量恢复
mysqlbinlog把多个二进制文件解析 管道传输给mysql处理, -v显示执行日志
$ mysqlbinlog binlog_files binlog_files_1 | mysql -u root -p -v
追加binlog_files_1 到binlog_files,合并为一个文件
$ binlog_files_1.sql >> binlog_files.sql
增量恢复
$ mysqladmin -u root -p flush-logs #生成二进制文件
cp前一个文件,保存之
mysqldump: Error: Binlogging on server not active
在mysql主从结构,在从库使用mysqldump备份时,出现此提示,