zoukankan      html  css  js  c++  java
  • Linux下mysql主从同步详细配置

    Linux下mysql主从同步详细配置

    1.环境准备

    准备两台服务器,一台主服务器(Master),另一台从服务器(Slave),然后要保证Master与Slave的版本要相同且Master不能高于Slave的版本,一般稳健的做法都是使其版本相同,因为MySQL不同版本之间的binlog(二进制日志)格式可能会不一样,最后会导致同步出现异常。

    介绍先到这里,以下我们先确认两台服务器的信息:

    • 主服务器(master)
    IP:10.16.195.49
    系统:Linux(redhat centos7 64)
    mysql版本:8.0.17
    同步数据库:model_slave
    同步帐号:model_slave
    同步密码:slave123
    
    • 从服务器(slave)两台
    IP:10.16.195.50/10.16.195.51
    系统:Linux(redhat centos7 64)
    mysql版本:8.0.17
    同步数据库:model_slave
    

    2.master服务器配置

    1.修改主服务器配置文件

    sudo vim /etc/my.cnf
    
    [mysqld]
    # 新增如下
    server-id=1
    log_bin=/data/mysql/mysql-bin.log
    expire_logs_days=10
    max_binlog_size=100M
    binlog_do_db=myslave  # 如果需要同时同步多个数据库,请另起一行设置binlog_do_db=需要同步的数据库名称
    binlog_ignore_db=mysql  # 不想同步的数据库
    

    2.保存退出,重启服务

    service mysql restart
    

    如果启动失败,通过查看mysql启动失败的日志,从日志内容寻找解决方案。

    cat /data/mysql/mysql.log | tail -30  
    

    3.查看并记住master当前二进制名和偏移量。

    这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复。

    mysql> show master status;
    +---------------+----------+--------------+------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +---------------+----------+--------------+------------------+
    | mysql-bin.000002 |     155 | model_slave         |mysql                  |
    +---------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    

    4.新建用于查看的mysql帐号

    mysql>
    create user 'model_slave'@'%' identified by 'slave';
    grant replication slave on *.* to 'model_slave'@'%';
    

    3.slave服务器配置

    1.修改从服务器配置

    sudo vim /etc/my.cnf
    
    [mysqld]
    server-id=2
    master-host=192.168.8.10
    master-user=rep1
    master-password=test123456
    master-port=3306
    replicate-do-db=cmdb
    

    2.重启从服务器

    service mysql restart
    

    此时报错:mysqld: unknown variable ‘master-host=

    原因是mysql5.5+版本主从复制不支持这些变量,需要在从库上用命令来设置:

    mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.10',
      MASTER_PORT=3306,
      MASTER_USER='rep1',
      MASTER_PASSWORD='test123456',
      MASTER_LOG_FILE='mysql-bin.000002',
      MASTER_LOG_POS=155;  # 后面两个参数的值与主库保持一致
    

    注意,server-id仍然需要在配置文件中配置,不然会和master一致,无法开启主从。

    3.启动slave

    mysql> slave start;
    Query OK, 0 rows affected (0.04 sec)
    

    4.查看slave的状态

    show slave statusG;
    

    如果这两项为yes,则表示成功:

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    

    image-20200317204300268

    5.如果有第二台或更多从库,配置操作同样,唯一注意的是配置文件中的server-id需要保持不同。

    3.同步主库已有数据到从库

    主库操作:

    1.停止主库数据更新操作

    mysql>flush tables with read lock;
    

    2.新开终端,生成主数据库的备份(导出数据库)

    • -–master-data:保证在dump时会记录到binlog名称和偏移值

    • -–lock-all-tables:为了数据在导出的时候没有其它新数据插入,保证一致性

    mysqldump –master-data=1 –lock-all-tables=true -uroot -pmysql123 model_slave > /home/model_slave_bak_20200317.sql
    

    3.将备份文件传到从库

    scp cmdb.sql gz_admin@10.16.195.50:/home/
    

    4、主库解锁

    mysql>unlock tables;
    

    从库操作:

    1.停止从库slave

    mysql>slave stop;
    

    2.新建数据库model_slave

    mysql> create database model_slave charset=utf8;
    

    3、导入数据

    [gz_admin@ops-dev ~]$ mysql -uroot -pmysql123 model_slave</home/model_slave_bak_20200317.sql
    

    mysql> use myslave;
    mysql> source /home/model_slave_bak_20200317.sql;
    

    4、查看从库已有该数据库和数据

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | model_slave        |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    

    4.测试同步

    1.在master中插入一条数据

    mysql> use model_slave;
    mysql> INSERT INTO users(id,name,info) VALUES(1, "jack","handsom");
    

    2.插入成功之后,稍等片刻,就可以在Slave服务器上查看到相同记录.

    不成功,仔细再检查一些配置文档。

    3.查看当前Slave服务器的同步状态及偏移值等信息

    more /var/lib/mysql/master.info
    

    查看Slave执行binlog文件的情况

    more /var/lib/mysql/relay-log.info
    

    5.常见问题

    1.问题现象

    启动slave,查看slave状态,发现报错。

    有个错误IO线程在连接中, 还有一个问题就是:

    Last_IO_Errno: 2061
    Last_IO_Error: error connecting to master 'root@192.168.0.10:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

    2.原因

    加密方式和解密方式不一致,修改密码加密规则.进入mysql控制台

    ALTER USER 'model_slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave123';
    FLUSH PRIVILEGES;
    

    3.抛出另一个问题

    Last_IO_Errno: 13117
    Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).

    4.解决方法:重启mysql服务

    service mysql restart
    

    5.进入mysql,重启slave

    mysql -u root -p
    start slave
    show slave statusG;
    

    成功!

  • 相关阅读:
    AcWing 372. 棋盘覆盖 二分图最大匹配
    LeetCode 1011. 在 D 天内送达包裹的能力 二分
    AcWing 920. 最优乘车 BFS DIJKSTRA SPFA 方法
    AcWing 903. 昂贵的聘礼 spfa dijstra
    Leetcode 209. 长度最小的子数组 双指针
    AcWing 1111. 字母 bfs dfs两份代码
    AcWing 904. 虫洞 spfa 图论
    深入学习微框架:Spring Boot
    深入学习微框架:Spring Boot
    spring boot web相关配置
  • 原文地址:https://www.cnblogs.com/ryxiong-blog/p/12513383.html
Copyright © 2011-2022 走看看