最近在看MySQL锁表的帮助文档时发现以前使用mysqldump备份时锁表有一点问题,以前在做备份写脚本时是这样锁表的mysql -A -Bse "flush tables with read lock;",后面看了官方文档知道其实这样是无效的,因为flush tables with read lock;语句在mysql的session退出后会隐式执行unlock tables,那么flush tables with read lock;只有在mysql的session不退出的情况下在开启一个session的时候才能真正的生效,而在平时我们自己手动备份的时候是可以这样操作的,但是如果是写脚本做定时备份,那么就不行了。
最后呢就去看了下mysqldump的文档大致总结出了一些在备份中比较常用的参数选项,当然,如果要查看mysqldump所有的参数选项可以去参看mysql的官方文档:http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html,当然有部分参数选项有版本限制,还有平时用的比较多的连接数据库时用的参数选项,想必都知道,在这里就不一一赘述了,常用的参数如下:
--add-locks#在转储前锁定库表,并且在结束转储结束后unlock,这个参数选项在备份中比较常用
--all-databases#转储所有的库表
--lock-all-tables,-x#锁定数据库中所有的库表,这里加的是只读锁
--lock-tables,-l#在转储之前锁表
--flush-logs,-F#在转储之前刷新MySQL服务器日志文件
--flush-privileges#在转储之前刷新MySQL服务器的权限表
--routines,-R#在转储的数据库中转储存储程序(函数和程序),这个如果有定义时间戳肯定会用到
--xml,-X #输出成xml格式
--opt#它可以给出很快的转储操作并产生一个可以很快装入MySQL服务器的转储文件。该选项默认开启,但可以用--skip-opt禁用
--allow-keywords#允许创建关键字列名。应在每个列名前面加上表名前缀
当然mysqldump是mysql中比较古老的备份和导入工具,平时备份还有很多的工具可以使用,如mysqlbackup、xtraback等等,这里就不一一列举,还有mysqldump是作为mysql的默认工具,那么它也追寻mysql读取配置文件my.cnf的规则,my.cnf会依次从4个路径的顺序读取,要注意的是后面的my.cnf会与前面的my.cnf内容比对,如有相同选项的不同配置或多出配置,或者会覆盖前者,my.cnf文件读取路径如下:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf#最后这个是家目录下的隐藏文件