zoukankan      html  css  js  c++  java
  • MySQL5.7不停机不锁表主从同步实战

    准备工作

    环境

    虚拟机201 1核 1G IP:192.168.0.201

    虚拟机202 1核 1G IP:192.168.0.202 克隆自201,需要修改ip地址和MySQL server UUIDs

    201防火墙对202开启3306端口

    1.  
      # 在201上执行
    2.  
      [root@192.168.0.201 ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.202" port protocol="tcp" port="3306" accept"
    3.  
      复制代码

    修改MySQL server UUIDs

    由于202这台服务器是从201克隆过来的,所有他们的MySQL server UUIDS是一样的,我们需要重新生成一个

    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.

    1.  
      #修改202上面的uuid
    2.  
       
    3.  
      mv /db/mysql/auto.cnf /db/mysql/auto.cnf.back
    4.  
      service mysqld restart
    5.  
      复制代码

    一、Master服务器201配置文件

    1.  
      basedir = /usr/local/mysql
    2.  
      datadir = /db/mysql
    3.  
      port = 3306
    4.  
      server_id = 201
    5.  
      socket = /tmp/mysql.sock
    6.  
      log-error = /data/log/mysql/mysql.log
    7.  
      pid-file = /db/mysql/mysqld.pid
    8.  
       
    9.  
      innodb_buffer_pool_size = 268435456
    10.  
      innodb_log_file_size = 64M
    11.  
       
    12.  
      log-bin=/db/binlog/mysql-bin
    13.  
      binlog-do-db=timophp
    14.  
      binlog-do-db=timosns
    15.  
      复制代码

    log-error(mysql错误日志存放路径)

    1.  
      mkdir /data/log/mysql
    2.  
      touch /data/log/mysql/mysql.log
    3.  
      chown mysql:mysql /data/log/mysql/mysql.log
    4.  
      复制代码

    log-bin

    1.  
      log-bin是设置binlog日志的位置并开启binlog日志的记录
    2.  
      mkdir /db/binlog
    3.  
      chown mysql:mysql /db/binlog
    4.  
      复制代码

    binlog-do-db和binlog-ignore-db说明

    binlog-do-db 需要记录binlog日志的数据库

    binlog-ignore-db 不需要记录binlog日志的数据库

    两个是对立的,一般只使用其中一个就可以了,如果数据库多,我们可以使用binlog-ignore-db来忽略其中几个,其它没被忽略的就会记录binlog日志

    二、Slave从服务器202配置文件

    1.  
      basedir = /usr/local/mysql
    2.  
      datadir = /db/mysql
    3.  
      port = 3306
    4.  
      server_id = 202
    5.  
      socket = /tmp/mysql.sock
    6.  
      log-error = /data/log/mysql/mysql.log
    7.  
      pid-file = /db/mysql/mysqld.pid
    8.  
      复制代码

    replicate-do-db和replicate-ignore-db说明

    replicate-do-db 需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可

    replicate-ignore-db 不需要复制的数据库,如果多个请重复设置这个选项即可

    三、重启主、从MySQL服务

    service mysqld restart

    四、在主MySQL服务器操作

    1)​创建复制​用户并授权

    mysql> grant replication slave on *.* to 'syncslave'@'%' identified by '27OP3B0R9@C?4ex>';

    说明:创建syncslave用户并分配replication slave权限(可以show grants;来查看权限​),用户名可以随机生成一个字符串。密码是27OP3B0R9@C?4ex>,可以随机生成一个字符串

    mysql> flush privileges;

    说明:刷新权限表

    五、备份Master数据再同步

    1)导出数据(在主库上执行)

    1.  
      [root@192.168.0.201 ~]# mysqldump -uroot -p123456 --flush-logs --single-transaction --master-data=2 timophp > /data/sql/timophp.sql
    2.  
      复制代码

    说明:

    --skip-lock-tables 不锁表

    --master-data=2 在导出的时候同时生成binlog文件名和位置在导出的文件开头。这个很重要。因此第4步也不需要执行了,binlog的文件和位置可以从这里拿到。

    --single-transaction 通过将导出操作封装在一个事务内来使得导出的数据是一个一致性快照

    打包压缩

    [root@192.168.0.201 ~]# tar -zcf /data/sql/timophp.sql /data/sql/timophp.sql.tar.gz

    复制到从库

    [root@192.168.0.201 ~]# scp /data/sql/timophp.sql.tar.gz root@192.168.0.202:/data/sql/timophp.sql.tar.gz

    六、在从数据库上操作

    1)解压

    [root@192.168.0.202 ~]# tar -zxf /data/sql/timophp.sql.tar.gz

    2)导入主库数据

    [root@192.168.0.202 ~]# mysql -uroot -p timophp < /data/sql/timophp.sql

    3)配置slave同步参数

    mysql> change master to master_host='192.168.1.201',master_user='syncslave',master_password='27OP3B0R9@C?4ex>',master_log_file='mysql-bin.000010',master_log_pos=154;

    说明:master_log_file和master_log_pos请看sql文件顶部有

    4)启动slave同步功能​

    mysql> start slave;

    5)查看salve同步状态​

    mysql>show slave statusG;

    说明:Slave_IO_Running: Connecting表示正在链接Master,正常应该是Yes,这里是因为我Master没启动,Slave_SQL_Running: Yes,正常,保证这两个都是Yes

    如果是为NO 执行:

    mysql>stop slave

    mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

    mysql>START SLAVE;

    在进行查看。

    转载于:https://juejin.im/post/5c063dbc51882528c4469496

  • 相关阅读:
    年度总结会议
    2018年度移动创新竞赛组总结
    移动竞赛组2019计划
    task ':app:mergeDebugResources' property 'aapt2FromMaven'
    SQL SERVER : 'GO' 附近有语法错误问题
    Visual C# 访问 SQLserver 数据库
    数据库系统概论 第三章 课后作业
    数据库系统概论 第三章 建表&插入SQL语句
    【pyqt5 QtDesigner SQLserver2017】 Python3.6 Demo
    【Win10 + PyCharm + Python + PyQt5 + pymssql】 Python 3.6 访问 SQLserver 2017(对话框界面)1
  • 原文地址:https://www.cnblogs.com/lidabo/p/14269178.html
Copyright © 2011-2022 走看看