zoukankan      html  css  js  c++  java
  • Mysql—主从复制

    主服务器Master配置

    一、修改配置文件,然后重启mysql服务

    [mysqld]
    server-id = 1               -- 唯一id
    log-bin = mysql-bin              -- 定义主服务器的二进制文件名,指定日志文件。其中这两行是本来就有的,可以不用动,添加下面三行即可.
    log-slave-updates = true         -- 允许从服务器进行同步更新
    binlog-do-db = study_flask       -- 记录日志的数据库
    binlog-ignore-db = mysql         -- 不记录日志的数据库
     
    gtid_mode=on
    enforce-gtid-consistency=true

    二、查看主服务器状态

    mysql> show master status;
    mysql> show master statusG
    

    注意看显示的参数,特别前面两个File和Position,在从服务器(Slave)配置主从关系会有用到的。这里的File的值为mysql-bin.000034,Position的值为191。

    获取主数据库中此刻数据的位置,主要用于从数据启动后,复制数据的起始位置,但是在获取这个状态值之前,主数据库就不能再有数据的修改操作,所以需要先设置读锁定有效。

    三、创建一个专门用于复制数据的用户

    mysql> create user 'dong'@'%'
    mysql> grant replication slave on *.* to 'dong'@'%'  identified by '123456!';
    mysql> flush privileges;

    从服务器Slave配置

    一、修改配置文件,然后重启mysql服务

    mysqld]
    server-id = 2
    log-bin = mysql-bin
    replicate-do-db = study_flask
    replicate-ignore-db = mysql,information_schema,performance_schema
    
    gtid_mode=on
    log-slave-updates=true
    enforce-gtid-consistency=true

    二、首先在主库上进行数据备份,然后启动从数据库,对主库备份的数据进行还原,这个时候主从数据库在备份那个时间点的数据是一致的。

    备份的手段有很多种,备份结束后可以释放读锁,主库就可以进行写操作。将备份还原到slave后,使用change master to命令挂载master端。

    三、停止slave从服务线程

    mysql> stop slave;

    四、用change mster 语句指定同步位置,切换slave到新的master

    mysql> change master to
        -> master_host='192.168.1.56',
        -> master_port=3306,
        -> master_user='dong',
        -> master_password='123456!',
        -> master_log_file='mysql-bin.000034',
        -> master_log_pos=191;
        -> master_auto_position=1;
    

    最后三行,要不使用前面两行,要不使用最后一行。5.6以后版本推荐使用最后一行。

    五、启动slave从服务线程

    mysql> start slave;

    六、查看从服务器(Slave)状态

    mysql> show slave status;   
    mysql> show slave statusG

    查看结果的结果,有两个关键性参数

    • Slave_IO_Running:yes
    • Slave_SQL_Running:yes

    这两个线程前面有提到,是slave上参与复制过程中两个很重要的线程。YES表示正常,NO表示异常。

    Slave_IO线程主要是将master上的binlong日志内容复制到slave的中继日志中(Relay_log),一般出现问题的概率不大, 出现问题大多数是因为权限或者网络等问题,导致连接不上master。

    Slave_SQL线程负责将中继日志中的SQL执行一遍,相对来说出错的概率大些。如有人手动的在从库中插入一些记录,导致主从同步的时候出现主键冲突。

    Slave_IO_STATE:Waiting for master to send event—这个状态表示中继日志同步完成,等待master有新的事件产生。

    遇到的报错问题

    1、Last_IO_Error: The slave IO thread stops because the master has @@GLOBAL.GTID_MODE ON and this server has @@GLOBAL.GTID_MODE OFF

    gtid_mode=on
    log-slave-updates=true
    enforce-gtid-consistency=true
    

    在从服务器的配置文件中加入上面的三项配置(此时主服务器的配置文件中已经存在上面的配置了)

    如果主数据库不是空库,一般是先备份,记住binlog位置点,恢复到从库。主库备份把其他的连接全断了,避免新数据的写入。

    一般是先保证主库不写入数据的情况下 备份主库在从库恢复 然后再执行同步命令。

    https://www.jb51.net/article/137925.htm

    https://blog.51cto.com/13706760/2171361

    https://www.cnblogs.com/crazylqy/p/5542558.html

    https://blog.csdn.net/u011976388/article/details/84777837

    https://www.cnblogs.com/jianmingyuan/p/10903682.html

    https://www.cnblogs.com/cocoxu1992/p/10670589.html

    https://www.jianshu.com/p/faf0127f1cb2

    https://blog.csdn.net/wmq880204/article/details/53160078

    https://www.cnblogs.com/abobo/p/4242417.html

  • 相关阅读:
    一些基本概念
    Linux命令
    浮点型数据
    编码习惯
    VC++ Debug编译方式
    程序和进程
    文件和目录
    登录
    c#发送http请求注意
    html5获取图片的宽高
  • 原文地址:https://www.cnblogs.com/liuhaidon/p/11670476.html
Copyright © 2011-2022 走看看