一、mysqldump
1.备份test库
#mysqldump -uroot -p'123' test >test.sql
2.备份 -B参数
#mysqldump -uroot -p'123' -B test >test_B.sql --B有create数据库,和use
#mysqldump -uroot -p'123' -B test test1 >test_B.sql --B有create数据库,和use,且同时备份test,test1两个库
3.备份 --compact 去除那些多余的字符
#mysqldump -uroot -p'123' -B --compact test >test_B_C.sql ---compact 去除那些多余的字符
4.mysql恢复
#mysql -uroot -p'123' <test_B.sql --假如备份的时候没有加-B,恢复的时候要先创建数据库,并use数据库
5.mysqldump的压缩 gzip
#mysqldump -uroot -p'123' -B test|gzip>test_B_bak.sql.gz
6.mysqldump的压缩恢复 gunzip
gunzip <test_B_bak.sql.gz|mysql -uroot -p'123'
7.mysqldump只备份表结构 -d
#mysqldump -uroot -p'123' -d test >test_d.sql
8.mysqldump只备份表数据(不带结构) -t
#mysqldump -uroot -p'123' -t test >test_t.sql
9.备份时刷新binlog -F
#mysqldump -uroot -p'123' -F test >test_F.sql
10.备份时记录二进制日志位置--master-data=1
#mysqldump -uroot -p'123' --master-data=1 test>tset_md.sql
总结:几种备份方式,备份文件的大小
11.mysqldump只备份test库中的orders表
#mysqldump -uroot -p'123' test orders>test_orders.sql
12.mysql导入备份的test库中的orders表
#mysql -uroot -p'123' test<test_orders.sql
或登录mysql
mysql>use test;
mysql>source /root/test_orders.sql
---------------------------------------------------------mysqldump中的锁表问题------------------------------------------------------------------
下面内容讨论的是InnDB引擎中的情况。
--mysqldump
mysqldump -uroot -p -B CRM --tables WorkOrder>CRM_WorkOrder_T.sql --导出数据库DB1中的WorkOrder表
mysqldump 默认会给数据表加上读锁,在这个语句中,只会锁住数据库CRM中的WorkOrder表,其他库表不受影响。
--master-data加锁
mysqldump -uroot -p --master-data=2 -B DB1 --tables WorkOrder>CRM_WorkOrder_T.sql --导出数据库DB1中的WorkOrder表
--master-data=2 和--master-data=1 都会自动加一个读锁(全局),这个锁表不是只将WorkOrder锁住,而且是所有的数据库锁住。不进数据库DB1不能进行写操作,其他数据库也不能进行写操作,读还是可以滴。
对比mysqldump和--master-data中的锁状态,mysqldump加的是table level lock(表级锁),它只会影响备份的表。而--master-data加的锁是 global read lock(全局读锁),它就会影响整个mysql的所有数据库。
--single-transaction
mysqldump -uroot -p --master-data=2 --single-transaction -B CRM --tables WorkOrder>CRM_WorkOrder_T.sql
如果说想着备份时,不锁表,可以用到参数--single-transaction,加上之后进行备份,所有mysql的库表就不会被锁了。