在一主两从环境中,模拟测试当主库宕机后的切换步骤mysql
个人系统为 CentOS6.7 x64linux
mysql 版本为 5.5.33 并经过二进制包安装sql
上个截图,三台系统和 mysql 都是一样的版本,一样步骤的安装数据库
[root@mysql-01 ~]# mysql -Vvim
mysql Ver 14.14 Distrib 5.5.33, for linux2.6 (x86_64) using readline 5.1服务器
[root@mysql-01 ~]# uname -r网络
2.6.32-573.el6.x86_64ide
三台环境的主机名和 ip 地址,职务测试
mysql-01 192.168.240.137 Masterspa
mysql-02 192.168.240.138 Slave-01
msyql-03 192.168.240.139 Slave-02
Master上的操做
将 master 192.168.240.137 关机,模拟真实场景中的宕机
[root@mysql-01 ~]# /etc/init.d/mysqld stop
Shutting down MySQL... SUCCESS!
[root@mysql-01 ~]# lsof -i :3306
[root@mysql-01 ~]#
Slave-01上的操做
确保 slave 数据库上已经执行了 relay log 中的所有命令
在 slave 上执行 show processlist; 命令,返回结果以下,说明更新执行完毕
Slave has read all relay log; waiting for the slave I/O thread to update it
在每一个从库上行 stop slave io_thread; 中止 IO 线程
mysql> show processlist;
mysql> stop slave io_thread;
编辑 /etc/my.cnf 文件,在 [ mysqld ] 目录下,开启 log-bin=mysql-bin 选项
而且注意 server-id ,不能和 Slave-02 上的 server-id 相同
[root@mysql-02 ~]# vim /etc/my.cnf
log-bin=mysql-bin
server-id=2
编辑完后保存退出,重启 mysql 服务
[root@mysql-02 ~]# /etc/init.d/mysqld restart
Shutting down MySQL. SUCCESS!
Starting MySQL.. SUCCESS!
在 Slave-01 上登陆 mysql
执行 reset master 命令,将 Slave-01 升级为 Master
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)
并查看 master 状态
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
建立一个用于同步的帐号并刷新
mysql> grant replication slave on *.* to yuci@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
编辑 /etc/hosts 文件,添加 ip 地址及对应的主机名
(我使用的的 vmware 的 NAT 模式)
[root@mysql-02 ~]# vim /etc/hosts
192.168.240.138 mysql-02
192.168.240.139 mysql-03
在 Slave-02 上的操做
一样先添加 ip 地址及对应的主机名
[root@mysql-03 ~]# vim /etc/hosts
192.168.240.138 mysql-02
192.168.240.139 mysql-03
测试刚才建立的 yuci 用户可否在 Slave-02 上登陆 Slave-01 的数据库
[root@mysql-03 ~]# mysql -uyuci -p123456 -h192.168.240.138
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
。。。。。。。。。。。。
mysql>
yuci 用户登陆成功,说明可使用该帐号进行数据同步
使用 root 用户登陆 mysql 服务,查看更新是否所有完成
[root@mysql-03 ~]# mysql -uroot -p123456
mysql> show processlist;
Slave has read all relay log; waiting for the slave I/O thread to update it
中止 slave 服务
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
输入主库信息以及用于同步的帐号,注意 log-file和log-pos,这两个值是以前在 Slave-01 上执行 show maste status\G 的返回值
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.240.138',
-> MASTER_PORT=3306,
-> MASTER_USER='yuci',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=107;
Query OK, 0 rows affected (0.01 sec)
开启 slave 服务
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
查看 slave 状态的 IO、SQL线程,两个 yes 说明切换完成
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
到此为止主从切换的操做已经所有完成,Slave-01 已经升级为 Master 它的从服务器是 Slave-02
在 Slave-01 上建立一个新的数据库,看看是否可以同步
Slave-01 上
mysql> create database tongbu;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tongbu |
+--------------------+
5 rows in set (0.00 sec)
Slave-02 上
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tongbu |
+--------------------+
5 rows in set (0.00 sec)
最后本身来个小总结吧
1.当从服务器要升职为主服务器时,要注意 my.cnf 文件中要开启 log-bin 参数。主服务器是必须开启的,从服务器能够不开启
2.IO线程报错 connecting主要是:网络不通,密码不对
结束~~~~~