阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL 5.6 数据库主从同步(Master/Slave)安装与配置详解

139次阅读
没有评论

共计 6642 个字符,预计需要花费 17 分钟才能阅读完成。

安装环境

 操作系统:CentOS 6.5 
数据库版本:MySQL 5.6.27
主机 A192.168.1.1(Master)主机 B:192.168.1.2(Slave)

这里强调的数据库的版本,是因为 MySQL 在 5.6 之前和之后的安装方式是不一样的。
本人在进行配置的时候,也遇到了这个坑,这里提前说明,希望大家不要采坑。

注:这里有一篇 CentOS 安装 MySQL 的文章,在这里引出,过程亲测,希望对大家有帮助:http://www.linuxidc.com/Linux/2017-10/147586.htm

基本环境配置

首先,要保证防火墙对 3306 端口的开启,(开启方式,请参考:[http://www.linuxidc.com/Linux/2017-10/147586.htm]),如果只是为了学习数据库的主从配置,可以使用 service iptables stop 命令直接关闭防火墙。

然后可以在两台机子之间进行 ping 操作,确保两台机器之间能够相同。

Master 的配置

在 Linux 环境下 MySQL 的配置文件的位置是在 /etc/my.cnf,在该文件下指定 Master 的配置如下:

log-bin=mysql-bin
server-id=2
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql
binlog-do-db=ufind_db 

这里的 server-id 用于标识唯一的数据库,这里设置为 2,在设置从库的时候就需要设置为其他值。

binlog-ignore-db:表示同步的时候 ignore 的数据库
binlog-do-db:指定需要同步的数据库

完整配置截图如下:

MySQL 5.6 数据库主从同步(Master/Slave)安装与配置详解

1、然后重启 mysql:service mysqld restart

2、进入 mysql:[root@VM_221_4_centos ~]# mysql -u root -p 回车,输入 mysql 密码进入。

3、赋予从库权限帐号,允许用户在主库上读取日志,赋予 192.168.1.2 也就是 Slave 机器有 File 权限,只赋予 Slave 机器有 File 权限还不行,还要给它 REPLICATION SLAVE 的权限才可以。

在 Master 数据库命令行中输入:

 >GRANT FILE ON *.* TO 'root'@'192.168.1.2' IDENTIFIED BY 'mysql password';

 >GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.1.2' IDENTIFIED BY 'mysql password';
>FLUSH PRIVILEGES

这里使用的仍是 root 用户作为同步的时候使用到的用户,可以自己设定。

4、重启 mysql,登录 mysql,显示主库信息

mysql> show master status;
mysql> show master status;
+------------------+----------+--------------+----------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                 | Executed_Gtid_Set |
+------------------+----------+--------------+----------------------------------+-------------------+
| mysql-bin.000004 |    28125 | ufind_db     | information_schema,cluster,mysql |                   |
+------------------+----------+--------------+----------------------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

MySQL 5.6 数据库主从同步(Master/Slave)安装与配置详解

这里的 File、Position 是在配置 Salve 的时候要使用到的,Binlog_Do_DB 表示要同步的数据库,Binlog_Ignore_DB 表示 Ignore 的数据库,这些都是在配置的时候进行指定的。

另外:如果执行这个步骤始终为 Empty set(0.00 sec),那说明前面的 my.cnf 没配置对。

Slave 的配置

1、从库的配置,首先也是修改配置文件:/etc/my.cnf 如下:

log-bin=mysql-bin
server-id=3
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql
replicate-do-db=ufind_db
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60

MySQL 5.6 数据库主从同步(Master/Slave)安装与配置详解

2、这里可以看到,在 MySQL5.6 之后的版本中没有指定:

master-host=192.168.1.1 #Master 的主机 IP
master-user=root
master-password=mysql password #Master 的 MySQL 密码 

3、这也是在网上很多搜索的配置过程,他们也都指定了数据库的版本,但是并没有说出来新版本的配置这种方式是不适用的。

4、如果,你在 MySQL5.6 和之后的版本中配置从库的时候,设置到了上边的内容,即指定了 master-host、master-user 等信息的话,重启 MySQL 的时候就回报错,错误信息如下:

[root@VM_128_194_centos bin]# service mysqld restart
Shutting down MySQL... SUCCESS! 
Starting MySQL... ERROR! The server quit without updating PID file (/data/mysqldb/VM_128_194_centos.pid).
[root@VM_128_194_centos bin]# 

此时,查看数据库的报错信息(数据库的目录, /data/mysqldb/VM_128_194_centos.err),可以看到:

2017-07-07 13:12:04 13345 [Note] InnoDB: Waiting for purge to start
2017-07-07 13:12:04 13345 [Note] InnoDB: 5.6.27 started; log sequence number 2850211
2017-07-07 13:12:04 13345 [ERROR] /data/home/server/mysql-5.6.27/bin/mysqld: unknown variable 'master-host=192.168.1.1'
2017-07-07 13:12:04 13345 [ERROR] Aborting

可以看出 master-host 被检测数是一个未知的变量,因此会出现错误。

5、在 5.6 以及后续版本的配置如下:

修改完 /etc/my.cnf 文件之后,重启一下 MySQL(service mysqld restart)

进入 Slave mysql 控制台,执行:

MySQL 5.6 数据库主从同步(Master/Slave)安装与配置详解


mysql> stop slave;  # 关闭 Slave
mysql> change master to master_host='192.168.1.1',master_user='root',master_password='123456',master_log_file='mysql-bin.000004', master_log_pos=28125;

mysql> start slave;  # 开启 Slave

在这里指定 Master 的信息,master_log_file 是在配置 Master 的时候的 File 选项,master_log_pos 是在配置 Master 的 Position 选项,这里要进行对应。

然后可以通过 mysql> show slave status; 查看配置的信息:

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.167.1.1
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 28125
               Relay_Log_File: VM_128_194_centos-relay-bin.000004
                Relay_Log_Pos: 26111
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: ufind_db
          Replicate_Ignore_DB: mysql
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 28125
              Relay_Log_Space: 26296
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 2
                  Master_UUID: 8ac3066a-9680-11e5-a2ec-5254007529fd
             Master_Info_File: /data/mysqldb/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql> 

可以看到,已经配置成功。

添加需要同步的从库 Slave

由于种种原因,测试的时候使用 test 库,这里我按照上述的方式,修改 Master 的 my.cnf 的配置文件,新增同步的数据库 test,重启 MySQL, 执行 Master 的:show master status 如下:

MySQL 5.6 数据库主从同步(Master/Slave)安装与配置详解

相应的, 要修改 Slave 从库的信息在 my.cnf 增加 replicate-do-db=test,重启 Mysql,根据上述的 show master status,在 Slave 从库中执行下边的内容:


>stop slave
>change master to master_host='192.168.1.1',master_user='root',master_password='123456',master_log_file='mysql-bin.000005', master_log_pos=120;
>start slave

然后使用:show slave status;

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.1
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 1422
               Relay_Log_File: VM_128_194_centos-relay-bin.000004
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: ufind_db,test
          Replicate_Ignore_DB: mysql
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1422
              Relay_Log_Space: 468
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 2
                  Master_UUID: 8ac3066a-9680-11e5-a2ec-5254007529fd
             Master_Info_File: /data/mysqldb/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql> 

已经新增加了 test。

真正的测试

在主库中新增数据库表,user,观察从库变化如下:

创建数据库的时候:

MySQL 5.6 数据库主从同步(Master/Slave)安装与配置详解

新增数据的时候:

MySQL 5.6 数据库主从同步(Master/Slave)安装与配置详解

删除 Master 数据库表的时候:
MySQL 5.6 数据库主从同步(Master/Slave)安装与配置详解

配置过程,到此为止,希望能够帮助大家,如有疑问 欢迎留言。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-10/147587.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计6642字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中