Linux Centos下MySQL主从Replication同步配置(一主一从)

MySQL 主从复制概念MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。 

Linux Centos下MySQL主从Replication同步配置(一主一从)

说明:由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高于Slave版本。(版本向下兼容)

实现MySQL主从复制需要进行的配置:

注意打开2边服务器防火墙3306端口,互相设置ip白名单

主服务器:
开启二进制日志
配置唯一的server-id
获得master二进制日志文件名及位置
创建一个用于slave和master通信的用户账号
从服务器:
配置唯一的server-id
使用master分配的用户账号读取master二进制日志
启用slave服务

一、环境:假设都是新建一个数据库db1

        主机: master操作系统:centos6.8 64位

                   IP:192.168.119.1

                   MySQL版本:5.6

         从机:  slave操作系统:centos 7.5 64位

               IP:192.168.119.2

                   MySQL版本:5.6

二、主服务器master修改:
1.修改mysql配置
找到主数据库的配置文件my.cnf(或者my.ini),插入如下:

[mysqld]
server-id=1 #设置server-id
log-bin=mysql-bin #开启二进制日志
log-slave-updates=1
binlog-do-db=db1 #需要同步的数据库,如果没有本行表示同步所有的数据库
binlog-ignore-db=mysql #被忽略的数据

Linux Centos下MySQL主从Replication同步配置(一主一从)

2.登录master机的mysql:mysql –u root –p

在master机上为slave机添加一同步帐号

grant replication slave on *.* to 'name'@'192.168.119.2' identified by '123456';

flush  privileges;

3.重启master机的mysql服务:service mysqld restart

Linux Centos下MySQL主从Replication同步配置(一主一从)

4.用show master status 命令看日志情况

show master status;

Linux Centos下MySQL主从Replication同步配置(一主一从)

通过该命令获得File和Position,在slave中有用 。注:基准这里的“mysql-bin.000017”和“3580”,在下面 “三.3设置Slave复制”的配置中会用到

三、从服务器Slave修改:

(1)修改slave机器中mysql配置文件my.cnf,该文件在/etc目录下

Linux Centos下MySQL主从Replication同步配置(一主一从)

同样在[mysqld]字段下添加如下内容

server-id=2
log-bin= mysql-bin
relay-log= mysql-relay-bin
read-only=1
log-slave-updates=1
replicate-do-db=db1#要同步的数据库,不写本行表示同步所有数据库

然后重启slave机的mysql:service mysqld restart

Linux Centos下MySQL主从Replication同步配置(一主一从)

(2)在slave机上验证对主机连接

mysql -h192.168.119.2 -urepl -p123456

 

show grants for [email protected];

(3)设置Slave复制,重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):

CHANGE MASTER TO
MASTER_HOST='主库ip',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=245,
MASTER_CONNECT_RETRY=10;

Linux Centos下MySQL主从Replication同步配置(一主一从)

4启动slave同步进程:
mysql>start slave;

5.查看slave状态:

show slave status\G
\G就是结束  再加一个";" 就多余了,所以才报错,这2个结束符号别重复使用就是...

Linux Centos下MySQL主从Replication同步配置(一主一从)

主要查看Slave_IO_Running和Slave_SQL_Running 两列是否都为YES

四、测试主从服务器是否能同步

在主服务器上面新建一个表,必须在设置的数据下

 五、MySQL 主从复制配置完整步骤如下(1如果新建库灰色背景滤过,2参见六、主库已经有很长时间,做从库需要全部步骤)

① 准备两台数据库环境或单台多实例环境,确定能正常启动和登录。

② 配置 my.cnf 文件:主库配置 log-bin 和 server-id 参数;从库配置 server-id,该值不能和主库及其他从库一样,一般不开启从库 log-bin 功能。注意配置后需要重启服务使之生效。

③ 登录主库,增加从库连接主库同步的账户,例如:rep,并授权 replication slave 同步的权限。

④ 登录主库,整库锁表 flush table with read lock(窗口关闭后即失效,超时参数设置的时间到了也失效);然后 show master status 查看 binlog 的位置状态。

⑤ 新开窗口,Linux 命令行备份或导出原有的数据库数据,并拷贝到从库所在的服务器目录。如果数据量很大,并且允许停机,可停机打包,而不用 mysqldump 。

⑥ 解锁主库,unlock tables;

⑦ 把主库导出的原有数据恢复到从库。

⑧ 根据主库的 show master status 查看 binlog 的位置状态,在从库执行 change master to ... 语句验证 rep 用户。

⑨ 从库开启同步开关,start slave。

⑩ 从库 show slave status\G,检查同步状态,并在主库进行更新测试。

 

六:重新做主从,完全同步 
该方法适用于主从库数据相差较大,或者要求数据完全统一的情况 
解决步骤如下: 
1.先进入主库,进行锁表,防止数据写入 
使用命令: 
mysql> flush tables with read lock; 
注意:该处是锁定为只读状态,语句不区分大小写 
2.进行数据备份 
#把数据备份到mysql.bak.sql文件 
[[email protected] mysql]#mysqldump -uroot -p -hlocalhost 数据库名> mysql.bak.sql 
这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失 
3.查看master 状态 
mysql> show master status; 
+-------------------+----------+--------------+-------------------------------+ 
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+-------------------+----------+--------------+-------------------------------+ 
| mysqld-bin.000001 | 3260 | | mysql,test,information_schema | 
+-------------------+----------+--------------+-------------------------------+ 
1 row in set (0.00 sec) 
4.把mysql备份文件传到从库机器,进行数据恢复 
#使用scp命令 
[[email protected] mysql]# scp mysql.bak.sql [email protected]:/tmp/ 
5.停止从库的状态 
mysql> stop slave; 
6.然后到从库执行mysql命令,导入数据备份 
mysql> source /tmp/mysql.bak.sql 
7.设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项 
change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260; 
8.重新开启从同步 
mysql> stop slave; 
9.查看同步状态 
mysql> show slave status\G 查看: 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 

10.主库解锁

mysql> unlock tables;