zoukankan      html  css  js  c++  java
  • mysql主从复制配置

    # 以下是mysql5.6及5.7版本的,其他版本不知是否一致

    目的:

    1.为了冗余备份,主库挂了,切换到从库使用

    2.为了实现读写分离,主从复制是实现读写分离的前提

    主从复制的原理图:

    配置步骤:

    1.修改配置文件

    vim /etc/my.cnf

    # 不同mysql的server-id需要不同

    主库添加配置信息: 

    [mysqld]
    
    server-id=1
    
    log-bin=z-mysql-bin

    从库添加配置信息:

    [mysqld]
    
    server-id=2
    
    read-only=true  # 设置只读,但是对mysql的root不生效

    重启mysql服务:

    systemctl restart mysqld.server

    # 命令不一定需要一样 

    重启有可能有问题:

    通过kill 或pkill 杀掉再启动也可以。

    2.主库进行锁表

    # 保持数据一致性,做完主从复制配置再解锁

    flush table with read lock;

    3.导出主库数据,并发送至从库,导入数据

    主库操作:

    (1) 备份当前数据库所有的数据

    mysqldump -uroot -p --all-databases > /data/all_data.sql

    (2) 推送备份的数据至从库data目录下

    scp /data/all_data.sql root@192.168.16.106:/data/

    在从库中执行:

    (1) 先进入数据库中

    (2) 导入主库的数据

    source /data/all_data.sql

    4.主库创建主从复制的用户并授权slave

    # 创建用户并授权的命令

    grant replication slave on *.* to 'master_copy'@'192.168.1.%' identified by 'wzz123';

    flush privileges;

    注:192.168.1.% 网段这个看你实际机器的

    5.从库建立主从关系

    # 在主库通过show master status 查看到log名和起始位置

     

    在从库执行该命令(和上图对应去填):

    change master to master_host='192.168.16.83',

    master_user='master_copy',

    master_password='wzz123',

    master_log_file='z-mysql-bin.000001',

    master_log_pos=472;

    注: 这些字符串中左右不能有空格!

    6.开启从库slave功能

    start slave;

    7.检查配置是否成功

    show slave statusG

     # 这俩参数必须都是Yes才行

    8.两项都显示Yes后,主库解锁

    unlock tables;

    配置中遇到的问题:

    1.找不到第一个log文件

    问题的原因:

    我在从库写连接主库的日志时候左右有空格,所以才导致找不到

    解决方式:

    (1) 从库先停止:

    slave stop;

    (2) 主库刷新日志:

    # 把sql命令刷到另一个bin-log文件去写

    flush log;

    查看主库的log变化:

     

    (3) 修改从库log文件和起始点:

    CHANGE MASTER TO MASTER_LOG_FILE='z-mysql-bin.000002',MASTER_LOG_POS=245;

    注:名称必须一致,注意左右是否有空格。

    (4) 启动,查看:

    slave start;

    show slave statusG

     

    # 正常

    2.UUID相同

    报错:

    Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

    报错原因:

    由于我这个slave从的机器是通过虚拟机克隆而来的,mysql都是安装好的,所以出问题。

    解决方式:

    (1) 把这个文件重命名,数据库找不到会重新创建一个
    
    mv /opt/mysql5.7/data/auto.cnf /opt/mysql5.7/data/auto.cnf.bak
    
    (2) 重启数据库
    
    systemctl restart mysqld.server
  • 相关阅读:
    Hdu 5396 Expression (区间Dp)
    Lightoj 1174
    codeforces 570 D. Tree Requests (dfs)
    codeforces 570 E. Pig and Palindromes (DP)
    Hdu 5385 The path
    Hdu 5384 Danganronpa (AC自动机模板)
    Hdu 5372 Segment Game (树状数组)
    Hdu 5379 Mahjong tree (dfs + 组合数)
    Hdu 5371 Hotaru's problem (manacher+枚举)
    Face The Right Way---hdu3276(开关问题)
  • 原文地址:https://www.cnblogs.com/zezhou/p/11523710.html
Copyright © 2011-2022 走看看