专注系统运维、网络架构,研究技术凯发app官方网站的解决方案,记录我的思想轨迹、工作学习、生活和关注的领域
分类: mysql/postgresql
2013-01-08 14:11:57
近期在测试mysql双主多个slave架构,利用keepavlied实现自动切换master。主要工作有:
1、mysql mater-maste工作(前期)
2、keepavlied搭建,还可以结合mysql proxy实现读写分离
3、处理master-mater-slave之间的同步关系
首先,先搭建mater-master的环境。
一、安装环境:
系统版本:rhel5.4.x86_64
mysql版本:mysql-5.0.45
mysqlserver_1: 192.168.15.178
mysqlserver_2: 192.168.15.185
二、正式安装:
在两台服务器中分别安装mysql(略过)。
配置mysql配置文件:
1)192.168.15.178的配置文件,如下红色标注是必须配置的,其他参数可以自行配置。
2)192.168.15.185的配置文件,如下红色标注是必须配置的,其他参数可以自行配置。
如上设置bin-log文件,并都设置对方为自己的主服务器,配置同步的数据库为map
三、配置mysql:
导入要同步的数据库,先以一台作为主服务器,同步数据。我以phpcmsv9为例。
1) 在两台mysql数据库服务器里面设置权限,分别执行如下命令:
grant replication slave on *.* to 'backup'@'192.168.15.%' identified by '123456';
在192.168.15.178查看master运行状态,获取binlog日志信息:
mysql> show master status;
------------------ ----------- -------------- ------------------
| file | position | binlog_do_db | binlog_ignore_db |
------------------ ----------- -------------- ------------------
| mysql-bin.000052 | 151744220 | | |
------------------ ----------- -------------- ------------------
1 row in set (0.00 sec)
2)在192.168.15.185上将192.168.15.178设为自己的主服务器执行如下命令:
change master to master_host='192.168.15.178',master_user='backup',master_password='123456',master_log_file='mysql-bin.000056',master_log_pos=151744220;
然后启动start slave;
注意这里写的bin-log参数是在178查看到的,即是对方的参数。
3) 然后在192.168.15.78执行:
mysql> show master status;
------------------ ---------- -------------- ------------------
| file | position | binlog_do_db | binlog_ignore_db |
------------------ ---------- -------------- ------------------
| mysql-bin.000005 | 98 | | |
------------------ ---------- -------------- ------------------
1 row in set (0.00 sec)
4)在192.168.15.78上将192.168.15.185设为自己的主服务器执行如下命令:
change master to master_host='192.168.15.185',master_user='backup',master_password='123456',master_log_file='mysql-bin.000005',master_log_pos=98;
然后启动start slave;
注意这里写的bin-log参数是在185查看到的,即是对方的参数。
5)mysql同步测试配置完毕,我们会发现在任何一台mysql上更新同步的数据库里面的数据,都会同步到另一台mysql。
6)测试:
192.168.15.185建表:
mysql> create table userstate(userstateid int auto_increment not null primary key, usestatename varchar(50) not null);
query ok, 0 rows affected (0.01 sec)
mysql> desc userstate;
-------------- ------------- ------ ----- --------- ----------------
| field | type | null | key | default | extra |
-------------- ------------- ------ ----- --------- ----------------
| userstateid | int(11) | no | pri | null | auto_increment |
| usestatename | varchar(50) | no | | | |
-------------- ------------- ------ ----- --------- ----------------
2 rows in set (0.02 sec)
192.168.15.178查表:
mysql> desc userstate;
-------------- ------------- ------ ----- --------- ----------------
| field | type | null | key | default | extra |
-------------- ------------- ------ ----- --------- ----------------
| userstateid | int(11) | no | pri | null | auto_increment |
| usestatename | varchar(50) | no | | | |
-------------- ------------- ------ ----- --------- ----------------
2 rows in set (0.00 sec)
ok