MySQL 主从备份
1. 主从备份
# 配置完成后需要去掉此配置
[mysqld]
skip-grant-tables
2. 主库配置
2.1 配置 my.cnf
[mysqld]
# 数据库唯一ID,主从的标识号绝对不能重复。
server-id = 1
# 开启bin-log,并指定文件目录和文件名前缀
log-bin = mysql-bin
# 需要同步liting数据库。如果是多个同步库,就以此格式另写几行即可。如果不指明对某个具体库同步,就去掉此行,表示同步所有库(除了ignore忽略的库)
binlog-do-db=sync_test
# 不同步mysql系统数据库。
# 如果是多个不同步库,就以此格式另写几行;也可以在一行,中间逗号隔开。
#binlog-ignore-db=mysql
# 确保binlog日志写入后与硬盘同步
sync_binlog = 1
# 跳过现有的采用checksum的事件
# mysql5.6.5以后的版本中binlog_checksum=crc32,而低版本都是binlog_checksum=none
binlog_checksum = none
# bin-log日志文件格式,设置为MIXED可以防止主键重复。
binlog_format = mixed
注意
在主服务器上最重要的二进制日志设置是 sync_binlog,这使得 MySQL 在每次提交事务的时候把二进制日志的内容同步到磁盘上,即使服务器崩溃也会把事件写入日志中。
sync_binlog 这个参数是对于 MySQL 系统来说是至关重要的,他不仅影响到 Binlog 对 MySQL 所带来的性能损耗,而且还影响到 MySQL 中数据的完整性。对于 sync_binlog 参数的各种设置的说明如下:
sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信 息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。sync_binlog=n,当每进行 n 次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。- 在
MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统 Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为"1"的时候,是最安全但是性能损耗最大的设置。因为当设置为 1 的时候,即使系统 Crash,也最多丢失 binlog_cache 中未完成的一个事务,对实际数据没有任何实质性影响。
从以往经验和相关测试来看,对于高并发事务的系统来说,
sync_binlog设置为"0"和设置为"1"的系统写入性能差距可能高达 5 倍甚至更多。