首页 Linux基础正文

MySQL主从同步配置步骤

Jean Linux基础 2017-11-01 442 0 mysql

1.准备两台数据库环境,或者单台多实例环境,能否正常启动和登录。

参考多实例配置:https://www.shnne.com/post/171.html


2.配置my.cnf文件,主库配置log-bin和server-id参数,从库配置server-id,不能和主库及其他从库一样,一般不开启从库log-bin功能,注意:配置参数后要重启生效。

主库配置修改如下查看的参数:(在[mysqld]下)

[root@kroqi 3307]# egrep "log-bin|server-id" /data/3306/my.cnf 
log-bin = /data/3306/mysql-bin
server-id = 1

登录主库检查是否开启成功,看目录下是否有logbin日志,或者登录主库的mysql通过下面的命令检查状态。

mysql> show variables like "log_bin";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

从库的配置只要server-id和主库不同即可。


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

grant replication slave on *.* to 'rep'@'192.168.1.%' identified by 'shnne123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

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

注:mysql5.5 flush table with read lock;

      mysql5.1 flush tables with read lock;

mysql> show master status;    
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |  1127282 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       126 |
| mysql-bin.000002 |       126 |
| mysql-bin.000003 |      2761 |
| mysql-bin.000004 |       888 |
+------------------+-----------+
4 rows in set (0.00 sec)

5.新开窗口,Linux命令行备份或导出主库原有的数据库数据,并拷贝到从库所在的服务器目录。

mysql -uroot -p123456 -S /data/3306/mysql.sock -A -B > /backup/mysql_allsql_bak.$(date +%F).sql


6.解锁主库,unlock tables; 

注:因为之前有所表的行为,如果不想执行锁表的命令,可以在第5步的备份数据库的时候,直接加-x 进行锁表操作。

如:mysqldump -uroot -p123456 -A -B -F --master-data=2 -x --events -S /data/3306/mysql.sock|gzip >/backup/all.sql.gz

#--master-data=2 会记录导出数据库文件当时log_bin的位置(2代表前面有--注释 ), -x表示锁表 ,-F表示在备份之前先刷新日志,-B表示导出文件的时候会添加一些创建数据库的语句,-A表示全部备份。


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

mysql -uroot -p123456 -S /data/3307/mysql.sock<all.sql

注:因为之前有-B参数,不需要指定数据库还原。


8.根据主库的show master status 查看binlog的位置状态,登陆从库执行下列语句

CHANGE MASTER TO

MASTER_HOST='192.168.1.101',

MASTER_PORT=3306,

MASTER_USER='rep',

MASTER_PASSWORD='shnne123456',

MASTER_LOG_FILE='mysql-bin.000004',

MASTER_LOG_POS=888;

上面两个标紫色的,如果在主库导出备份的时候添加了--master-data=1的参数,可以不用执行。

检查

cat /data/3307/data/master.info 


9.从库开启同步开关,start slave;


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

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.17.147.11
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 1127195
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes    #一个yes,开启IO线程
            Slave_SQL_Running: Yes    #第二个yes,开启mysql线程
              Replicate_Do_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: 888    #主库log-bin文件开始的位置
              Relay_Log_Space: 403
              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: 1
1 row in set (0.00 sec)

在主库创建数据库,创建表,并在从库查看是否成功。


注:如果做主从从级联,需要在中间的从库的my.cnf开启如下两个参数,并重启,然后配置和上面的从库同样的配置

log_slave_updates=1  

log-bin=/cifpay/mysql-bin.log


如果需要跳过错误,需要在从库的my.cnf里的mysqld里面添加如下内容

slave-skip-errors = 1062,....    #跳过错误号,逗号指定多个

replicate-do-db= shnne,....    #同步某个指定的数据库,逗号指定多个

replicate-ignore-db=mysql,.....   #跳过同步指定的数据库,逗号指定多个


设置从库只读

可以在

[mysqld]

read-only

重启数据库

还有一种是在启动的时候加--read-only(要修改启动脚本,麻烦)

评论