1) A,B两台mysql服务器mysql
1、服务器参数,编辑/etc/my.cnf
[A 服务器]
server-id = 1
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
master-host = 192.168.255.195
master-user = repl
master-password = repl
master-port = 3306
master-connect-retry = 10
sync-binlog = 1
log-bin=mysql-binsql
[B 服务器]
server-id = 2
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
master-host = 192.168.255.194
master-user = repl
master-password = repl
master-port = 3306
master-connect-retry = 10
sync-binlog = 1shell
log-bin=mysql-bin数据库
2) 在A和B上进行数据库操做bash
A/B: Slave stop;服务器
A/B: Reset master;ide
A: grant replication slave on *.* to repl@192.168.255.194 identified by 'repl';测试
B: grant replication slave on *.* to repl@192.168.255.195 identified by 'repl';spa
A/B: show master status;orm
A: change master to master_host='192.168.255.194',master_user='repl',master_password='repl',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=98;(log根据 master status)
B:
change master to master_host='192.168.255.195',master_user='repl',master_password='repl',master_port=3306,master_log_file='mysql-bin.000006',master_log_pos=98; (log根据 master status)
A/B: slave start;
A/B: show slave status\G;(查看同步状态)
看到以下状态就表示同步成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
3) 测试数据库同步,在A的test库里增长表,在B的test库里删除表
Use test;
A:Create table username (id int(15));
查看B中是否有username这个表
B: drop table username
查看A中是否已经删除usernam这个表
A/B : show slave status\G;(再次查看同步状态,若是没问题就表示成功)
4) 互为同步配置实例
1. A B 互为主从同步test, 不一样步mysql:
两个数据库配置中均设置:binlog-do-db=test, binlog-ignore-db=mysql,replicate-do-db=test,replicate-ignore-db=mysql
2. A B 互为主从只同步test,不一样步其余数据库,新建立的也不会同步
两个数据库配置中均设置:binlog-do-db=test,replicate-do-db=test
3. A B 互为主从不一样步mysql, 同步其余数据库,譬如建立的新数据库也会同步
两个数据库配置中均设置:binlog-ignore-db=mysql,replicate-ignore-db=mysql
4. A B 互为主从同步全部数据库,包括新建的数据库
两个数据库配置中均不设置上述四项
5) 实现自动同步的shell脚本
1. 增长super和replication client on权限
grant super on *.* to repl@192.168.255.194 identified by 'repl';
grant replication client on *.* to repl@192.168.255.194 identified by 'repl';
2. 自动同步脚本autosync.sh
#!/bin/bash
while true
do
status=`/usr/bin/mysql -uroot -e "show slave status\G;"|grep Slave_SQL_Running|cut -f2 -d":"|sed 's/ //'`
if [ $status != "Yes" ]
then
A=`/usr/bin/mysql -urepl -prepl -h192.168.255.194 -e "show master status"|grep mysql-bin|awk '{print $2}'`
/usr/bin/mysql -uroot -e "slave stop"
/usr/bin/mysql -uroot -e "change master to master_host='192.168.255.194',master_user='repl',master_password='repl',master_port=3306,
master_log_file='mysql-bin.000001',master_log_pos=$A"
/usr/bin/mysql -uroot -e "slave start"
fi
sleep 10
done
3. 后台执行
nohup ./autosync.sh >/dev/null 2>&1 &