mysqldump是mysql软件内自带的逻辑备份工具,把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的过程。该工具只支持单线程工作。支持远程导出。
Eg:mysqldump –h127.0.0.1 -uroot –pmysql –R –single-transaction –master-data=2 --q –e –all-databases
参考文档:https: // blog.csdn.net/stephenxu111/article/details/9310715
涉及参数 secure-file-priv
mysqldump -uroot -pmysql --single-transaction --master-data=2 -E -R --all-databases > full.sql
mysqldump -uroot -pmysql --single-transaction --master-data=2 -E -R --databases test [employees ceshi] > test.sql
mysqldump -uroot -pmysql --single-transaction --master-data=2 -E -R test a [b c] > double.sql
注:不指定databases参数,不包含建库语句
mysqldump -uroot -pmysql --single-transaction --master-data=2 test test --where="id<6 and name='a'" > test.sql
mysqldump -uroot -pmysql --no-data --routines --events --databases test [ceshi]> dump-defs.sql
注:可用于测试升级
mysqldump -uroot -pmysql --no-create-info --routines --events --databases test [ceshi]> dump-data.sql
mysqldump --host=h1 -uroot -proot remote_db1 tablename | mysql --host=h2 -uroot -proot db2
注:db2数据库必须存在
注:必须指定secure-file-priv 安全目录参数!!!否则报错无法导出
mysqldump --tab=/tmp/12 --fields-terminated-by=',' --fields-optionally-enclosed-by='"' --lines-terminated-by='\n' DBNAME
mysqldump --tab=/tmp/12 --fields-terminated-by=',' --fields-optionally-enclosed-by='"' --lines-terminated-by='\n' DBNAME TABNAME1 [TABNAME2]
注:每张表格生成两个文件
*.sql 属于执行命令用户(root) 包含建表语句
*.txt 属于数据库用户(mysql) 包含数据
mysqldump -uroot -pmysql --single-transaction --master-data=2 --all-databases > full_1.sql
mysqldump -uroot -pmysql --single-transaction --master-data=2 -E -R --all-databases > full.sql
注:--all-database 参数是不包含存储过程,事件等,需要格外指定参数导出。
测试环境:
测试语句:
mysqldump -uroot -pmysql --single-transaction --master-data=2 -E -R --all-databases > full.sql
测试目的:针对INNODB表,开启事务性备份是否会堵塞DDL操作
测试方法:根据general 通用日志,判断表是否已经完成备份。对已备份完毕,正在完成备份,未开始备份表分别做DDL操作,判断是否会堵塞DDL操作
1.开启全库备份
mysqldump -uroot -pmysql --single-transaction --master-data=2 -E -R --all-databases > full.sql
2.观察通用日志,发现已经employees.departments表已经完成备份
3.进行DDL操作,正常进行
4.备份正常完成
1.开启全库备份
mysqldump -uroot -pmysql --single-transaction --master-data=2 -E -R --all-databases > full.sql
2.观察通用日志,发现正在对xh.test表进行备份
3.进行DDL操作,并堵塞
4.查看进程
5.备份正常完成
1.开启全库备份
mysqldump -uroot -pmysql --single-transaction --master-data=2 -E -R --all-databases > full.sql
2.观察通用日志,现在仍在备份employees数据库,还未备份到xh库
3.进行DDL操作,正常进行
4.导出报错
结论:使用 --single-transaction 参数导出数据,DDL操作只会影响正在备份的表,已经完成备份或还未备份的表不会被堵塞。但是对未完成备份的表做完DDL操作,当备份到这张被DDL之后的表,mysqldump进程被中断并报错。
免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:ts@56dr.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
Copyright © 2009-2021 56dr.com. All Rights Reserved. 特网科技 版权所有 珠海市特网科技有限公司 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 中国互联网举报中心 增值电信业务经营许可证B2