概述:前面一直讲高可用集群,但是没有讲高可用集群所真正服务的主角--数据库。互联网的基础之基础就是数据,数据库的高可用技术也正是一个运维人员必不可少的技能。
本次集群拓扑:
内核版本:2.6.32-431.el6.x86_64
发行版:Red Hat Enterprise Linux Server release 6.5 (Santiago)
mysql版本:mysql Ver 14.14 Distrib 5.1.71, for redhat-linux-gnu (x86_64) using readline 5.1
1.修改mysql配置文件
我们的拓扑为三台服务,但是slave2是为了演示从slave1复制出数据库的,现在只是做一个双机备份。
master my.cnf:(最后三行为添加的参数)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index
slave1 my.cnf:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
重启master和slave1的mysql服务
mysql> create user repl_user;
mysql> grant all privileges on *.* to 'repl_user'@'172.25.3.%' identified by 'redhat';
可能有的同学会问这样豪放的给复制用户权限是不是不太妥当呀,其实是因为我一开始只给了(REPLICATION和SLAVE权限)但是发现主从复制不成功最后只能暂时先妥协,等我研究明白主从复制用户到底明确需要哪几个参数,并且那几个参数的具体作用时,再回来进行补充。
3.配置slave上的mysql
mysql> CHANGE MASTER TO MASTER_HOST='172.25.3.60',MASTER_USER='repl_user',MASTER_PASSWORD='redhat',MASTER_PORT=3306;
上面命令确定了master的位置(ip),端口号,连接mysql的用户,密码。配置了这些数据后,再开启slave的复制,mysql主从复制就可以正常进行了。
现在启动slave
mysql> start slave
tips:如果你的master和slave1是刚装好的mysql,建议清一下master的日志使用RESET MASTER,然后再启动slave。
4.观察主从复制的状态。
master状态:
mysql> show master status\G
*************************** 1. row ***************************
File: master-bin.000001
Position: 185
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
第一行:是正在写入的日志,目前是master-bin.000001
第二行:写入的位置
slave状态:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.3.60
Master_User: repl_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 185
Relay_Log_File: slavse-relay-bin.000002
Relay_Log_Pos: 331
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主要看两个参数,一个是Slave_IO_Running,另一个是Slave_SQL_Running,这两个都为yes的话,主从复制就是正常的状态。
现在实际测试下
master:
创建一个test数据库
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MO |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
slave:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MO |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)