mysql主从复制大体分3个步骤:
- 在主库上把更新的数据写入到二进制日志binglog文件里面;
- 备库把主库的二进制日志复制到自己的relay_log中;
- 备库读取relay_log并将里面的数据重放到数据库。
上述步骤在主从之间涉及到3个线程,a:主库上面的数据写入binglog线程,b:从库上面启动的I/O数据同步线程,该线程在主库上启动一个特殊的二进制转储线程,去读取binglog文件,并把数据发送给I/O线程保存到relay_log,c:从库的sql线程读取relay_log并写入数据库
创建同步复制帐号:该帐号需要下列权限
mysql>grant replication slave,replication client on *.* to rep@'172.16.0.%' identified by 'password';
复制帐号的权限其实只需要replication slave权限,replication client 是为了复制帐号的监控和管理需要
配置主库和从库配置文件,在主库修改my.cnf文件的下列选项
log_bin = /Data/mysql/3306/data/mysql #开启binglog文件记录
server_id = 1 #必须明确指明server_id,而且不容许复制环境有重复的server_id
relay_log = /Data/mysql/3306/data/mysql-relay-bin #开启relay_log并指定位置,该选项有默认值,也可不加
log_slave_updates = 1 #写relay-log的时候也写到bin-log,主要用在M-M-S环境,这里也可以不启用
备注:不要在配置文件my.cnf里面设置master_host或master_port这些老的选项,会导致一些问题
启动复制:mysql>change master to master_host = '172.16.0.11',master_user='rep',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=0;
mysql>start slave;
mysql>show slave status\G;
下面给出一些推荐的复制配置
- 主库上二进制日志最重要的选项sync_binlog=1 ,开启该选项,mysql每次在事务提交前会把二进制日志同步到磁盘,保证服务器崩溃时,不会丢失事件。它只作用于binglog,而不是relay_log
如使用innoDB选项,则推荐下列选项:
innodb_flush_log_at_trx_commit
#flush every log write
innodb_support_xa =1
#mysql 5.0 or newer only (innodb_safe_binglog
#mysql 4.0 only)
skip_slave_start #选项阻止备库奔溃重启后自动启动复制
read_only #选项阻止大部分用户修改非临时表