环境两个Linux环境虚拟机,ip分别192.168.25.128,192.168.25.129
由于我这边是两台虚拟机复制过来的,所以在这之前需要修改Mysql数据库的UUID
root@localhost /]# find -name auto.cnf
root@localhost /]# vi /usr/local/mysql/data/mysql/auto.cnf
##修改此处保证唯一就行
[auto]
server-uuid=719f3c28-0924-11e9-9e79-000c29a0b231
配置Master主服务器
1:修改配置文件
vi /etc/my.cnf
在my.cnf最下面添加如下
server-id=128 //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
log-bin=master-bin
log-bin-index=master-bin.index
2:在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。
mysql>create user repl; //创建新用户
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.25.%' IDENTIFIED BY '123456';
mysql>flush privileges;
注释: repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为123456。说明一下192.168.25.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.25.0-192.168.25.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。
重启MySQL服务
[root@localhost /]# service mysqld restart
3:查看日志
mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 1285 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
配置Slave从服务器
4:修改配置文件
vi /etc/my.cnf
在my.cnf最下面添加如下
server-id=129
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
重启MySQL服务
[root@localhost /]# service mysqld restart
5:连接Master
连接mysql
change master to master_host='192.168.25.128', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='123456',
master_log_file='master-bin.000001',//Master服务器产生的日志
master_log_pos=0;
6:start slave;
7:检查从服务器复制功能状态:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.25.128
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000002
Read_Master_Log_Pos: 1060
Relay_Log_File: slave-relay-bin.000005
Relay_Log_Pos: 1224
Relay_Master_Log_File: master-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
8:主从服务器测试:
主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:
mysql> create database hi_db;
Query OK, 1 row affected (0.00 sec)
mysql> use hi_db;
Database changed
mysql> create table hi_tb(id int(3),name char(10));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into hi_tb values(001,'bobu');
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hi_db |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
从服务器Mysql查询:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hi_db | //I'M here,大家看到了吧
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> use hi_db
Database changed
mysql> select * from hi_tb; //查看主服务器上新增的具体数据
+------+------+
| id | name |
+------+------+
| 1 | bobu |
+------+------+
1 row in set (0.00 sec)
10,完成:
编写一shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了,发短信警报吧。