AB复制主要通过2个线程实现:
从库上的
I/O线程:从主库上把bin-log下载到从库后,放到从库的Relay-log中。
SQL线程:把Relay-log中的动作,在从库上做一次。
配置文件:
主从需要有不同的server_id
主库需要开启binlog日志
master:
vim /etc/my.cnf 【在主库开启bin-log日志】
[mysql]
server_id = 1
log-bin=binlog
log-bin-index=binlog.index
从库需要开启relay log日志
slave:
vim /etc/my.cnf 【在从库开启relay-log日志】
[mysql]
server_id = 2
relay_log = /app/mysql/mysql-relay-bin
relay_log_index=/app/mysql/mysql-relay-bin.index
(配置文件修改,重启服务生效)
1.备份主库(只有1主就在业务低峰进行备份,还有其他从库就用从库做备份)
例如:
开始mysqldump:mysqldump --single-transaction --master-data --triggers --routines --all-databases -u root -p >> /tmp/all.sql
2.把备份恢复到从库
从:
Mysql>source /home/w2cx_ssh_u/all.sql
3.主库添加备份账号(或使用已有账号)
例如:主库
mysql> GRANT replication slave ON . TO ‘replicat’@’%’ identified by ‘123456’; 【创建一个用户,赋予复制权限】
Query OK, 0 rows affected (0.05 sec)
mysql> flush privileges; 【权限生效】
Query OK, 0 rows affected (0.00 sec)
主:查看备份时的日志点
grep -i “CHANGE MASTER TO” all.sql
从:
change master to master_host=‘172.16.10.56’, master_port=3306, master_user=‘replicat’, master_password=‘123456’, master_log_file=‘mysql-bin.000010’,master_log_pos=41918975;
start slave;
【查看AB复制成功没】
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两个进程是yes就ok了
在主库上写点数据测试一下吧
#######tips
Seconds_Behind_Master: 0 【说明同步效率非常好:主库发生变化,过了多少秒,从库就更新过来了】
slave:【从库的数据应该全是从主库同步过来的,不应该有人往从库中写数据】
vim /etc/my.cnf
read-only=1 【只读,如果使用root用户登录,可以写数据,其它用户不能】