简介
mysql备份分为物理备份和逻辑备份,物理备份是将数据库的磁盘数据进行备份,逻辑备份是将表数据备份。mysqldump就是逻辑备份,这篇文章主要讲解mysqldump的参数。
mysqldump测试
#开启genneral log方便观察
set global general_log='on';
#创建测试库和表
create database test;
create table tb1(id int);
insert into tb1(id) values(1),(2);
create table tb2(name varchar(10));
insert into tb2(name) values('dsq'),('csh'),('jcy');
#监控general_log
tail -f mysql_general.log
#备份库
mysqldump -h ip -u name --databases test -p > test.sql
##可以观察到
lock tables 'tb1' read #每次导出表之前获取表的读锁
select /*!40001 SQL_NO_CACHE*/ * from 'tb1'; #查询表
unlock tables; #解锁表
#备份库,使用--single-transaction
mysqldump -h ip -u name --single-transaction --databases test -p > test.sql
#可以观察到
set transaction isolation level repeatable read #设置事务隔离级别
start transaction #启动事务,保证一致性读
savepoint sp #导出每个表之前保存一个save ponint
rollback to savepoint sp #每次导出一个表就使用rollback回滚一下
#transaction可以保证非锁定的一致性读
mysqldump参数
--add-drop-databases
--databases db1 [db2 db3]
--master-data #记录binary log的位置和名称,适用于建立replication
--no-data #不导出数据
--opt #默认参数,表示--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset
--quick #一行一行的获取表数据,而不是先将数据全部缓存到磁盘,然后导出,存在大表就需要--quick
--tables [tb1 tb2 tb3] #导出表
--events -E#包含events scheduler
--routines -R#导出自定义函数
-w "name='dsq'" #导出满足条件的记录
使用场景
#数据库备份
mysqldump -h ip -u name --single-transaction -R -E --databases test -p > test.sql
#导出主库数据到备库
mysqldump -h ip -u name --single-transaction -R -E --source-data -R -E --databases test -p > test.sql
#导出表结构
mysqldump -h ip -u name --databases test --no-data -p > test.sql