1、主从服务器IP
1.1 主服务器(master):195.111.2.1
1.2 从服务器(slave): 195.111.2.2
1.3 主从数据库版本一致,(该项目Mysql版本为5.7.18)
2主服务器配置【195.111.2.1】
2.1修改MySQL的配置文件my.cnf
[root@jdap01 ~]# vi /etc/mysql/my.cnf
在【mysqld】下加入以下内容:
必须添加:
#server_id是服务器的id
server_id=51
#开启二进制日志
log_bin=mysql_bin
可选择添加:
#不需要备份的数据库
binlog_ignore_db = mysql
#需要备份的数据库
binlog_do_db=test
#存储二进制日志的缓存
binlog_cache_size = 1M
#主从复制的格式(mixed,statement,row,默认为statement)
binlog_format = mixed
#二进制日志自动删除/过期的天数,默认值为0,表示不自动删除
expire_logs_days = 0
特别注意:不能把字母间的 aa_ff 写成 aa-ff
2.2重启service
找到mysql.server,重启
[root@jdap01 support-files]# ./mysql.server restart
如果重启失败:说明设置的参数不对(检查大小写,空格和字母间的连接符)
2.3注册可以访问主库文件的用户
mysql> grant replication slave,replication client on . to mysql@’195.111.2.2’ identified by ‘mysql1234’;
注:
mysql为用户名;
mysql1234为密码;
195.111.2.2为从库的IP;
2.4展示主库日志信息
执行以下命令
mysql> show master status ;
显示如下
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000004 | 154 | test | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
记录下:mysql_bin.000004和154(从库中配置需要用到)
3 从服务器配置【195.111.2.2】
3.1修改MySQL的配置文件my.cnf
[root@jdap01 ~]# vi /etc/mysql/my.cnf
在【mysqld】下加入以下内容:
必须添加:
#server_id是服务器的id
server_id=51
#开启二进制日志
log_bin=mysql_bin
可选择添加:
#不需要备份的数据库
replicate_ignore_db = mysql
#需要备份的数据库
replicate_do_db=test
注:还有很多配置,这里就不一一介绍了
3.2设置同步(之前没配置过,可跳过此步骤,直接执行3.3)
3.2.1重置同步
清除此前可能存在的同步:
mysql> reset slave;
3.2.2停止同步
停止同步,默认同步是开启的:
mysql> stop slave;
3.3 配置同步
mysql> change master to master_host='195.111.2.1',master_user='mysql',master_password='mysql1234',master_log_file='mysql_bin.000004',master_log_pos=154;
注:
master_host表示主库的IP
master_user表示主库master上同步的用户(2.3中的用户名)
master_password表示同步的密码(2.3中的密码)
master_log_file表示从哪个binlog文件开始同步
master_log_pos表示从该binlog文件的哪个pos节点位置开始同步
其中master_log_file和master_log_pos就是主库设置2.4中记录的binlog文件名和pos位置节点
3.4查看同步状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 195.111.2.1
Master_User: mysql
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql_bin.00004
Read_Master_Log_Pos: 154
Relay_Log_File: V_wangshenweb01-relay-bin.000002
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql_bin.00003
Slave_IO_Running:Yes
Slave_SQL_Running: Yes
如果Slave_IO_Running:Yes 和Slave_SQL_Running: Yes 都为Yes,说明配置成功
如果为以下状况
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 195.111.2.1
Master_User: mysql
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql_bin.00004
Read_Master_Log_Pos: 154
Relay_Log_File: V_wangshenweb01-relay-bin.000002
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql_bin.00003
Slave_IO_Running:No
Slave_SQL_Running: No
运行以下命令开始复制;
mysql> start slave;
执行没有错误,再执行
mysql> show slave status\G;
如果Slave_IO_Running:Slave_SQL_Running都为Yes,说明配置成功
如果出现以下状况:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 195.111.2.1
Master_User: mysql
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: log_bin.000005
Read_Master_Log_Pos: 154
Relay_Log_File: V_wangshenweb01-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: log_bin.000005
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB: mysql
并且下边报的错为:
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
这个错误是主从的一个日志问题,需要简单的配置一下,步骤如下:
1、停止从库同步【在从库中做操作】
mysql> stop slave;
2、清空主库日志【在主库中做操作】
mysql> flush logs;
3、查看主库状态并记录mysql_bin.000005和154
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000005 | 154 | test | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
4、在从库中重新输入对应的日志文件位置和pos节点
mysql> change master to master_host='195.111.2.1',master_user='mysql',master_password='mysql1234',master_log_file='mysql_bin.000005',master_log_pos=154;
5、启动从库
mysql> start slave;
6、mysql> show slave status\G;
此时如果Slave_IO_Running:Slave_SQL_Running都为Yes,配置成功
注:
Slave_IO_Running:No 说明可能是从库与主库网络不通
Slave_SQL_Running: No 说明可能是从库与主库数据不一致
Slave_IO_Running:Connectiong 这种情况也可能出现
出现以上情况,大致归为以下几点原因:
1、可能是因为防火墙
2、Selinux中SELINUX设置成disabled
3、网络不通
4、Pos不对