1 授权用户
(1)A服务器:
mysql> grant replication slave,file on *.* to 'backup1'@'192.168.1.12' identified
by '123456';
Query OK, 0 rows affected (0.00 sec)
(2)B服务器:
mysql> grant replication slave,file on *.* to 'backup2'@'192.168.1.10' identified
by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
然后都停止MYSQL 服务器。
2 配置文件
在两个机器上的my.ini里面都开启二进制日志。
(1)A服务器my.ini
#服务器编号。
server-id = 1
log-bin=mysql-bin
#启用从属服务器上的日志功能,使这台计算机可以用来构成一个镜像链(A->B->C)
log-slave-updates
#从库是否只读,0表示可读写,1表示只读
read-only=1
#只复制某个表
#replicate-do-table=tablename
#只复制某些表(可用匹配符)
#replicate-wild-do-table=tablename%
#只复制某个库
replicate-do-db = backup
#只复制某些库
#replicte-wild-do-db=dbname%
#不复制某个表
#replicate-ignore-table=tablename
#不复制某些表
#replicate-wild-ignore-table=tablename%
#不复制某个库
replicate-ignore-db=mysql
#复制完的sql语句是否立即从中继日志中清除,1表示立即清除
relay-log-purge = 1
#从服务器主机,用于show slave hosts生成从库清单
report-host=slave-1
#即不管发生什么错误,镜像处理工作也继续进行
slave-skip-errors=all
#每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安#全的做法,但效率最低。
#默认设置是n=0,意思是由操作系统来负责二进制日志文件的同步工作。
sync_binlog=1
#全局增量值。
auto_increment_increment=2
#全局增量起始值。一般地,需要设置auto_increment_increment和auto_increment_offset是
#在多台主mysql同时工作的情况下,进行分表处理才需要的。
auto_increment_offset=1
(2)B服务器my.ini
#服务器编号
server-id = 2
log-bin=mysql-bin
#启用从属服务器上的日志功能,使这台计算机可以用来构成一个镜像链(A->B->C)
log-slave-updates
#从库是否只读,0表示可读写,1表示只读
read-only=1
#只复制某个表
#replicate-do-table=tablename
#只复制某些表(可用匹配符)
#replicate-wild-do-table=tablename%
#只复制某个库
replicate-do-db = backup
#只复制某些库
#replicte-wild-do-db=dbname%
#不复制某个表
#replicate-ignore-table=tablename
#不复制某些表
#replicate-wild-ignore-table=tablename%
#不复制某个库
replicate-ignore-db=mysql
#复制完的sql语句是否立即从中继日志中清除,1表示立即清除
relay-log-purge = 1
#从服务器主机,用于show slave hosts生成从库清单
report-host=slave-2
#即不管发生什么错误,镜像处理工作也继续进行
slave-skip-errors=all
#每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安#全的做法,但效率最低。
#默认设置是n=0,意思是由操作系统来负责二进制日志文件的同步工作。
sync_binlog=1
#全局增量值。
auto_increment_increment=2
#全局增量起始值。一般地,需要设置auto_increment_increment和auto_increment_offset是
#在多台主mysql同时工作的情况下,进行分表处理才需要的。
auto_increment_offset=1
3 进入MYSQL的SHELL
(1)A服务器:
mysql> flush tables with read lock/G
Query OK, 0 rows affected (0.00 sec)
mysql> show master status/G
File: mysql-bin.000001
Position: 98
Binlog_Do_DB: backup
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
(2)B服务器:
mysql> flush tables with read lock/G
Query OK, 0 rows affected (0.00 sec)
mysql> show master status/G
File: mysql-bin.000001
Position: 98
Binlog_Do_DB: backup
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
完成以上两步后,然后备份自己的数据,保持两个机器的数据一致。
4 在各自机器上执行CHANGE MASTER TO命令
(1)A服务器:
mysql> change master to
-> master_host='192.168.1.12',
-> master_user='backup2',
-> master_password='123456',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=598;
Query OK, 0 rows affected (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
(2)B服务器:
mysql> change master to
-> master_host='192.168.1. 10',
-> master_user='backup1',
-> master_password='123456',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=98;
Query OK, 0 rows affected (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
5 查看各自机器上的IO进程和SLAVE进程是否都开启
在A,B服务器中分别执行如下操作:
mysql>show slave status /G;
如果下面三项显示为这样,则表示已经启动正常。
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
还可以在A,B服务器中分别执行如下操作:
(1) A服务器:
mysql> show processlist/G
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db: NULL
Command: Connect
Time: 2130
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 1223
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
*************************** 3. row ***************************
Id: 3
User: root
Host: localhost
db: test
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 4. row ***************************
Id: 4
User: backup2
Host: 192.168.1.12:3307
db: NULL
Command: Binlog Dump
Time: 1398
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
4 rows in set (0.00 sec)
(2) B服务器
mysql> show processlist/G
*************************** 1. row ***************************
Id: 19
User: system user
Host:
db: NULL
Command: Connect
Time: 2130
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 20
User: system user
Host:
db: NULL
Command: Connect
Time: 1223
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
*************************** 3. row ***************************
Id: 21
User: root
Host: localhost
db: test
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 4. row ***************************
Id: 22
User: backup1
Host: 192.168.1.10:3307
db: NULL
Command: Binlog Dump
Time: 1398
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
4 rows in set (0.00 sec)