请参考文章《Mysql主从复制详解》做以下实验:
1
、修改原slave 服务器配置
//
配置原slave服务器/etc/my.cnf文件,添加红字的内容:
server-id=2 #
从服务器ID号,不要和主ID相同
master-host=192.168.20.155 #
指定主服务器IP地址
master-user=replication #
指定在主服务器上可以进行同步的
用户名
master-password=123456 #
密码
master-port=3306 #
同步所用端口
master-connect-retry=60 #
断点从新连接时间
replicate-ignore-db=mysql #
屏蔽对mysql库的同步
replicate-do-db=test1 #
同步的数据库的名称
log-bin=/var/log/mysql/updatelog #
设定生成log文件名
binlog-do-db=test1 #
设置同步数据库名
binlog-ignore-db=mysql #
避免同步mysql用户配置,以免不必
要的麻烦
2
、创建更新日志的目录并给mysql用户的权限
# mkdir /var/log/mysql
# chown -R mysql.mysql /var/log/mysql
3
、重新启动mysql服务,创建一个同步专用账号
# service mysqld restart
//
给与从服务器用户replication的同步权限
# mysql -uroot -p123456
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.20.%'IDENTIFIED BY '123456';
//
刷新权限,使设置生效
mysql>Flush privileges;
4
、修改原master配置文件
//
配置原master务器/etc/my.cnf文件,添加红字的内容:
log-bin=mysql-bin #
启动二进制日志系统
server-id=1 #
本机数据库ID 标示为主log-bin=/var/log/mysql/updatelog # 设定生成log文件名,这里的路径没
有mysql目录要手动创建并给于它
mysql用户的权限。
binlog-do-db=test1 #
二进制需要同步的数据库名
binlog-ignore-db=mysql,test #
避免同步mysql用户配置,以免不必
要的麻烦
master-host=192.168.20.128 #
设置从原slave数据库同步更新
master-user=replication #
更新用户
master-password=123456 #
密码
master-port=3306 #
端口
replicate-do-db=test1 #
需要更新的库
//
重启mysql服务
# service mysqld restart
//
在原从服务器查询
# mysql -uroot -p123456
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| updatelog.000001 | 106 | test1 | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
//
在原主服务器查询
# mysql -uroot -p123456
mysql> SHOW MASTER STATUS;
//
先停止slave服务
mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.20.128',MASTER_USER='replication',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='updatelog.000001',MASTER_LOG_POS=106;
//
根据上面主服务器的show master status的结果,进行从服务器的二进制数据库记录回归,达到同步的效果
//
启动从服务器同步服务
mysql> SLAVE START;
5
、验证配置
//
在beijing原主服务器上进入mysql命令行
mysql> SHOW SLAVE STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
此处Slave_IO_Running ,Slave_SQL_Running 都应该是yes,表示从库的I/O,Slave_SQL线程都正确开启.表明数据库正在同步。
//
在shanghai原从服务器上进入mysql命令行
mysql> SHOW SLAVE STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
此处Slave_IO_Running ,Slave_SQL_Running 都应该是yes,表示从库的I/O,Slave_SQL线程都正确开启.表明数据库正在同步。
6
、测试
//
在beijing服务器上建立一个表
mysql> use test1;
mysql> create table test1(id int(4),name varchar(20));
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| name |
|
test1
|
| user |
+-----------------+
3 rows in set (0.00 sec)
//
在shanghai服务器上查询
mysql> use test1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| name |
|
test1
|
| user |
+-----------------+
3 rows in set (0.00 sec)
//
在shanghai服务器上建立一个表
mysql> create table test2(id int(4),name varchar(20));
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| name |
| test1 |
|
test2
|
| user |
+-----------------+
4 rows in set (0.00 sec)| user |
+-----------------+
3 rows in set (0.00 sec)
//
在beijing服务器上查询
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| name |
| test1 |
|
test2
|
| user |
+-----------------+
4 rows in set (0.00 sec)
双向复制试验成功!!!