原文转自:https://www.cnblogs.com/itzgr/p/10233932.html
作者:木二
目录
- 一 基础环境
- 二 实际部署
- 2.1 安装MySQL
- 2.2 初始化MySQL
- 2.3 master my.cf配置
- 2.4 创建账号
- 2.5 slave my.cf配置
- 2.6 启动slave
- 2.7 手动同步
- 三 启动主从
- 3.1 Slave启动主从服务
- 3.2 验证主从
一 基础环境
主机名
|
系统版本
|
MySQL版本
|
主机IP
|
master
|
CentOS 6.8
|
MySQL 5.6
|
172.24.8.10
|
slave01
|
CentOS 6.8
|
MySQL 5.6
|
172.24.8.11
|
二 实际部署
2.1 安装MySQL
1 [root@Master ~]# yum list installed | grep mysql #查看是否存在其他MySQL组件
2 [root@Master ~]# yum -y remove mysql-libs.x86_64 #为避免冲突引发报错,卸载已存在的组件
3 [root@Master ~]# wget http://repo.mysql.com/mysql-community-release-el6-7.noarch.rpm
4 [root@Master ~]# rpm -ivh mysql-community-release-el6-7.noarch.rpm
5 [root@Master ~]# yum install mysql-community-server -y
6 [root@Master ~]# chkconfig --list | grep mysqld #查看MySQL是否加入启动项
7 [root@Master ~]# chkconfig mysqld on
2.2 初始化MySQL
1 [root@Master ~]# service mysqld start
2 [root@Master ~]# mysql_secure_installation
3 [root@Master ~]# service iptables stop
4 [root@Master ~]# chkconfig iptables off
5 [root@Master ~]# vi /etc/sysconfig/selinux
6 SELINUX=disabled
注意:以上操作在Slave主机上也需要执行。
2.3 master my.cf配置
1 [root@Master ~]# vi /etc/my.cnf
2 [mysqld]
3 ……
4 server-id=1 #设置主服务器master的id
5 log-bin=mysql-bin #配置二进制变更日志命名格式
注意:
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
1 # 不同步哪些数据库
2 binlog-ignore-db = mysql
3 binlog-ignore-db = test
4 binlog-ignore-db = information_schema
5 # 只同步哪些数据库,除此之外,其他不同步
6 binlog-do-db = mysqltest
2.4 创建账号
1 [root@Master ~]# mysql -uroot -p
2 Enter password:
3 mysql> grant replication slave on *.* to 'repl_user'@'172.24.8.11' identified by 'x12345678';
4 mysql> flush privileges;
5 [root@Master ~]# service mysqld restart
6 [root@Master ~]# mysql -uroot -p
7 Enter password:
8 mysql> show master status;
file:mysql-bin.000001
position:120
2.5 slave my.cf配置
1 [root@Master ~]# vi /etc/my.cnf
2 [mysqld]
3 server-id=2 #设置从服务器slave的id
4 log-bin=mysql-bin #如果此slave是其他slave的master,则此项也必须开启
5 relay_log=mysql-relay-bin #配置二进制relay日志命名格式
6 log_slave_updates=1 #表示slave将复制事件写进自己的二进制日志
7 read_only=1
2.6 启动slave
1 [root@Slave01 ~]# service mysqld restart
2 [root@Slave01 ~]# mysql -uroot -p
3 Enter password:
4 mysql> change master to master_host='172.24.8.10',
5 -> master_user='repl_user',
6 -> master_password='x12345678',
7 -> master_log_file='mysql-bin.000001',
8 -> master_log_pos=120;
9 mysql> show slave status\G #查看slave状态
10 ……
11 Slave_IO_State:
12 Master_Host: 172.24.8.10
13 Master_User: repl_user
14 Master_Port: 3306
15 Connect_Retry: 60
16 Master_Log_File: mysql-bin.000001
17 Read_Master_Log_Pos: 120
18 Relay_Log_File: =mysql-relay-bin.000001
19 Relay_Log_Pos: 4
20 Relay_Master_Log_File: mysql-bin.000001
21 Slave_IO_Running: No
22 Slave_SQL_Running: No
23 ……
24 Exec_Master_Log_Pos: 120
25 Relay_Log_Space: 120
26 ……
27 Seconds_Behind_Master: NULL
28 Master_SSL_Verify_Server_Cert: No
29 Master_Info_File: /var/lib/mysql/master.info
30 SQL_Delay: 0
31 SQL_Remaining_Delay: NULL
32 Slave_SQL_Running_State:
33 Master_Retry_Count: 86400
34 ……
提示:
Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running是No,表明slave还没有开始复制过程。
2.7 手动同步
如果Master已经存在数据,则在开启主备复制之前,需要将Master和Slave手动同步一次(/var/lib/mysql整个目录打包tar.gz),具体方法参考《004.MySQL主库手动复制至从库》。
注意:本实验都是重新安装的MySQL,可直接启动同步。
三 启动主从
3.1 Slave启动主从服务
1 [root@Slave01 ~]# service mysqld restart
2 [root@Slave01 ~]# mysql -uroot -p
3 Enter password:
4 mysql> start slave;
5 mysql> show slave status\G #查看slave状态
6 ……
7 Slave_IO_State: Waiting for master to send event
8 Master_Host: 172.24.8.10
9 Master_User: repl_user
10 Master_Port: 3306
11 Connect_Retry: 60
12 Master_Log_File: mysql-bin.000001
13 Read_Master_Log_Pos: 120
14 Relay_Log_File: =mysql-relay-bin.000001
15 Relay_Log_Pos: 283
16 Relay_Master_Log_File: mysql-bin.000002
17 Slave_IO_Running: YES
18 Slave_SQL_Running: YES
19 ……
20 Exec_Master_Log_Pos: 120
21 Relay_Log_Space: 120
22 ……
23 Master_Info_File: /var/lib/mysql/master.info
提示:
slave的I/O和SQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。日志的位置增加了,意味着一些事件被获取并执行了。如果你在master上进行修改,你可以在slave上看到各种日志文件的位置的变化,同样,你也可以看到数据库中数据的变化。
3.2 验证主从
在Master主服务器上创建库并插入相应数据:
1 [root@Master ~]# mysql -uroot -p
2 Enter password:
3 mysql> create database mysqltest;
4 mysql> use mysqltest;
5 mysql> create table user(id int(5),name char(10));
6 mysql> insert into user values (00001,'zhangsan');
7 在Slave从服务器上进行验证:
8 [root@Master ~]# mysql -uroot -p
9 Enter password:
10 mysql> show databases;
11 mysql> select * from mysqltest.user;
结论:
从上图中的结果,我们可以看到mysql主从复制已经在起作用了,我们在主数据库中写入的数据已经复制到我们的从数据库中了。
提示:
若出现以下报错:
可尝试重启slave:
1 mysql> reset slave;