MySQL互为主从复制以及主主互备
2015/5/8 10:14:22
实验环境:
主机名 | ip地址 | 操作系统 | 应用角色 |
---|---|---|---|
mysql-master | 192.168.1.87 | Centos 6.6 | Master |
mysql-slave | 192.168.1.198 | Centos 6.6 | Slave |
192.168.1.50 | VIP |
软件版本:
软件名 | 软件版本 |
---|---|
Mysql | 5.1.73 |
Keepalived | 1.2.12 |
一: 配置MySQL互为主从复制
1.安装MySQL服务
[root@mysql-master ~]# yum -y install mysql-server
2.修改mysql-master配置文件
#修改MySQL配置文件/etc/my.cnf,在"[mysqld]"段添加如下内容:
server-id = 1 #节点标识,主从节点不能相同,必须全局唯一。
log-bin=mysql-bin #开启MySQL的binlog日志功能,"mysql-bin"表示日志文件的命名格式,会生成如:"mysql-bin.xxxx"
relay-log = mysql-relay-bin #定义relay-log日志文件的命名格式。
#复制过滤选项,可以过滤不需要复制的数据库或表,如"mysql.%"表示不复制MySQL库下所有对象。
#于此对应的反选项,"replicate-wild-do-table"表示指定需要复制的数据库或表。
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%
3.修改mysql-slave配置文件
#修改MySQL配置文件/etc/my.cnf,在"[mysqld]"段添加如下内容:
server-id = 2
log-bin=mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%
4.手动同步数据库。
#如果master已经有MySQL数据,那么在主主互备之前,需要将master和slave俩个MySQL的数据进行同步,首先在master备份MySQL数据,执行如下SQL语句:
mysql>flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
#直接打包压缩或使用mysqldump工具导出数据,操作过程如下:
[root@mysql-master ~]# cd /var/lib/
[root@mysql-master lib]# tar zcvf mysql.tar.gz mysql
[root@mysql-master lib]# scp -r mysql.tar.gz mysql-slave:/var/lib/
5.依次重启master和slave上mysql服务
[root@mysql-master ~]# service mysqld restart
[root@mysql-slave ~]# service mysqld restart
6.创建复制用户并授权。
#在mysql-master上创建复制用户
mysql>grant replication slave on *.* to 'repl_user'@'192.168.1.198' identified by 'repl_passwd';
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 262 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
#然后在mysql-slave的MySQL库中将master设为自己的主服务器,操作过程如下:
#注:"master_log_file"和"master_log_pos",这两个选项的值刚好是master上通过SQL语句"show master status;"查询到的结果
mysql> change master to \
-> master_host='192.168.1.87',
-> master_user='repl_user',
-> master_password='repl_passwd',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=262;
Query OK, 0 rows affected (0.07 sec)
#在mysql-slave启动slave服务,执行如下:
mysql>start slave;
Query OK, 0 rows affected (0.00 sec)
#在