1、数据库同步设置
主机操作系统:Centos 6.2
数据库版本:mysql Ver 14.14 Distrib 5.1.73
前提:MYSQL数据库正常启动
ServA:122.112.x.x
ServB:211.101.x.x
1.1 配置同步账号
在ServA上增加一个ServB可以登录的帐号:
Mysql>grant replication slave on *.* TO yunip@'211.101.x.x' IDENTIFIED BY '123456';
mysql> flush privileges;
mysql> quit
在ServB上增加一个ServA可以登录的帐号:
Mysql>grant replication slave on *.* TO yunip@'122.112.x.x' IDENTIFIED BY '123456';
mysql> flush privileges;
mysql> quit
2、配置数据库参数
以root用户登录ServA,修改ServA的my.cnf文件
[mysqld]
log-bin=mysql-bin
server-id = 1
log-bin = mysql-bin
log-slave-updates
sync_binlog=1
auto-increment-increment = 2
auto-increment-offset = 1 //就是为了让双主同时在一张表中进行添加操作时不会出现id冲突. replicate-do-db = test
replicate-ignore-db =mysql
master-host = 211.101.x.x
master-user = yunip
master-password = 123456
master-port = 3306
重启mysql服务:
service mysqldrestart
以root用户登录ServB,修改ServB的my.cnf文件
vi /etc/my.cnf
在[mysqld]的配置项中增加如下配置:
[mysqld]
log-bin=mysql-bin
server-id = 2
log-bin = mysql-bin
log-slave-updates
sync_binlog=1
auto-increment-increment = 2
auto-increment-offset = 2 //就是为了让双主同时在一张表中进行添加操作时不会出现id冲突.
replicate-do-db = test
replicate-ignore-db =mysql
master-host = 122.112.x.x
master-user = yunip
master-password = 123456
master-port = 3306
注:二库都只有server-id不同和 auto-increment- offset不同
auto-increment-offset是用来设定数据库中自动增长的起点的,回为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突
replicate-do-db 指定同步的数据库,我们只在两台服务器间同步mydb数据库
另:auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2
(这段标注是抄袭51cto好友“红豆杀”的其主页是http://home.51cto.com/index.php?s=/space/2517622^_^ 在他这学到不少东西。)
#配置完成后,重启两台数据库
service mysqld restart
3、分别重启服务器ServA、ServB上的mysql服务
分别在服务器ServA、ServB 上查看做为主服务器状态
在ServA:
mysql> stop slave;
mysql> flush tables with read lock;#防止进入新的数据
Query OK, 0 rows affected (0.00 sec)
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000015
Position: 106
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
在ServB:
mysql> stop slave;
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000025
Position: 106
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
注:这里锁表的目的是为了生产环境中不让进新的数据,好让从服务器定位同步位置。初次同步完成后,记得解锁。
4、分别在服务器ServA、ServB上用change master语句指定同步位置 :
在 ServA
mysql>change master to master_host='211.101.x.x',master_user='yunip',master_password='123456',master_log_file='mysql-bin.000025',master_log_pos=106;
Query OK, 0 rows affected (2.28 sec)
在ServB
mysql>change master to master_host='122.112.x.x',master_user='yunip',master_password='123456',master_log_file='mysql-bin.000015',master_log_pos=106;
Query OK, 0 rows affected (0.01 sec)
注:master_log_file,master_log_pos由上面主服务器查出的状态值中确定
master_log_file对应File,master_log_pos对应Position
在ServA、ServB上 :
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
分别在服务器ServA、ServB上启动从服务器线程
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
分别在服务器ServA、ServB上查看从服务器状态 :
mysql> show slave status\G
*************************** 1. row ***************************
主要关注以下 2 个参数:
...
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
...
注:查看以上两项的值,均为Yes则表示状态正常。
5、测试
ServB上
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| p2pbbs |
| p2pnews |
| p2pwiki |
| test |
+--------------------+
6 rows in set (0.00 sec)
mysql> use test;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table water (id int);
Query OK, 0 rows affected (0.04 sec)
mysql> insert into water values(1);
Query OK, 1 row affected (0.01 sec)
mysql>commit;
Query OK, 0 rows affected (0.00 sec)
在 ServA 上
mysql> show tables;
+--------------------+
| Tables_in_db_rocky |
+--------------------+
| test |
| water |
+--------------------+
2 rows in set (0.00 sec)
mysql> select * from water;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
本文转自奔跑在路上博客51CTO博客,原文链接http://blog.51cto.com/qiangsh/1554761如需转载请自行联系原作者
qianghong000