MySQL互为主从双配置

1)        A B 两台 mysql 服务器

一、服务器参数,编辑 /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-bin


[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 = 1

log-bin=mysql-bin

 

2)        A B 上进行数据库操作

A/B: Slave stop;

A/B: Reset master;

A: grant replication slave on *.* to [email protected] identified by 'repl';

B: grant replication slave on *.* to [email protected] identified by 'repl';

A/B: show master status;

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 [email protected] identified by 'repl';

grant replication client on *.* to [email protected] 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 &

 

你可能感兴趣的:(mysql)