xfwduke
2016-06-01 08:45:05 +08:00
额... 想不到还被当典型了-_-
因为看到 po 主说 mysqldump 不能远程备份,觉得他应该知道怎么用,所以也没想到要详细点
在要求比较严格的生产环境, 确实不太建议用 mysqldump 做远程备份.
这里有 2 个说法
1. 如果远程机器和 db 机器都是内网, 远程备份的速度一般没本地快. 而备份时候对 db 的影响还是不小的 --- 主要是负载
2. 如果走外网, 让 mysql 监听到外网 ip, 这肯定是不对的
用 mysqldump 在 db 机器本地做备份. 考虑到 db 机器本身可能损坏导致数据丢失, 所以备份的结果肯定需要放到异机器保留
这个 MySQL 自己没这样的功能, 需要做一些周边系统的开发. 一般会做出有这样功能的支持系统
1. 在本地做 mysqldump 备份
2. 自动用各种可选的文件传输协议( ssh, ftp, 网络磁盘) 把备份放到异机器
3. db 本地以磁盘空间做参考, 考虑保留最近的 N 份备份
4. 远程机器保留更长的 M 份 (M>N)
5. db 机器还需要把 binlog 做远程备份, 保留的时间段至少要 >=M
再回过头来说 mysqldump
这个工具如果不加任何参数, 是需要有 lock 权限, 对于生产环境是没法用的. 但是只要添加了适当的参数, 权限就只需要 select
通常, 在使用 innodb 引擎的 MySQL 上, mysqldump 的命令行参数是
mysqldump -u${USER} -p${PWD} --default-character-set=${CHARSET} --single-transaction --skip-opt -q --create-options -R ${DB1} ${DB2} ... | gzip > backup_result_file.sql.gz
解释下几个重要的
1. --single-transaction 对于 innodb 引擎会建立全局一致性事务, 保证所有表都处于相同的时间状态
2. --skip-opt 关闭备份前获取全局锁
3. -q 禁止 client 缓存结果, 这个在本地备份场景极其重要, 防止因为数据过多, mysqldump 占用过多内存引起 OOM
4. 字符集指定, 这个非常重要. 通常如果无法确定 db 字符集或者字符集有多种兼容性差的组合----如同时又 GBK 和 UTF-8, 那么选用 BINARY 会比较好
其他的随便看看 -help 就好了