zoukankan      html  css  js  c++  java
  • Linux Centos下MySQL主从Replication同步配置(一主一从)

    MySQL 主从复制概念MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。 

    说明:由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高于Slave版本。(版本向下兼容)

    实现MySQL主从复制需要进行的配置:

    注意打开2边服务器防火墙3306端口,互相设置ip白名单

    主服务器:
    开启二进制日志
    配置唯一的server-id
    获得master二进制日志文件名及位置
    创建一个用于slave和master通信的用户账号
    从服务器:
    配置唯一的server-id
    使用master分配的用户账号读取master二进制日志
    启用slave服务

    一、环境:假设都是新建一个数据库db1

            主机: master操作系统:centos6.8 64位

                       IP:192.168.119.1

                       MySQL版本:5.6

             从机:  slave操作系统:centos 7.5 64位

                   IP:192.168.119.2

                       MySQL版本:5.6

    二、主服务器master修改:
    1.修改mysql配置
    找到主数据库的配置文件my.cnf(或者my.ini),插入如下:

    [mysqld]
    server-id=1 #设置server-id
    log-bin=mysql-bin #开启二进制日志
    log-slave-updates=1
    binlog-do-db=db1 #需要同步的数据库,如果没有本行表示同步所有的数据库
    binlog-ignore-db=mysql #被忽略的数据

    2.登录master机的mysql:mysql –u root –p

    在master机上为slave机添加一同步帐号

    grant replication slave on *.* to 'name'@'192.168.119.2' identified by '123456';

    flush  privileges;

    3.重启master机的mysql服务:service mysqld restart

    4.用show master status 命令看日志情况

    show master status;

    通过该命令获得File和Position,在slave中有用 。注:基准这里的“mysql-bin.000017”和“3580”,在下面 “三.3设置Slave复制”的配置中会用到

    三、从服务器Slave修改:

    (1)修改slave机器中mysql配置文件my.cnf,该文件在/etc目录下

    同样在[mysqld]字段下添加如下内容

    server-id=2
    log-bin= mysql-bin
    relay-log= mysql-relay-bin
    read-only=1
    log-slave-updates=1
    replicate-do-db=db1#要同步的数据库,不写本行表示同步所有数据库

    然后重启slave机的mysql:service mysqld restart

    (2)在slave机上验证对主机连接

    mysql -h192.168.119.2 -urepl -p123456

    show grants for repl@192.168.119.1;

    (3)设置Slave复制,重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):

    CHANGE MASTER TO
    MASTER_HOST='主库ip',
    MASTER_USER='repl',
    MASTER_PASSWORD='123456',
    MASTER_PORT=3306,
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=245,
    MASTER_CONNECT_RETRY=10;

    4启动slave同步进程:
    mysql>start slave;

    5.查看slave状态:

    show slave statusG
    G就是结束  再加一个";" 就多余了,所以才报错,这2个结束符号别重复使用就是...

    主要查看Slave_IO_Running和Slave_SQL_Running 两列是否都为YES

    四、测试主从服务器是否能同步

    在主服务器上面新建一个表,必须在设置的数据下

     五、MySQL 主从复制配置完整步骤如下(1如果新建库灰色背景滤过,2参见六、主库已经有很长时间,做从库需要全部步骤)

    ① 准备两台数据库环境或单台多实例环境,确定能正常启动和登录。

    ② 配置 my.cnf 文件:主库配置 log-bin 和 server-id 参数;从库配置 server-id,该值不能和主库及其他从库一样,一般不开启从库 log-bin 功能。注意配置后需要重启服务使之生效。

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

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

    ⑤ 新开窗口,Linux 命令行备份或导出原有的数据库数据,并拷贝到从库所在的服务器目录。如果数据量很大,并且允许停机,可停机打包,而不用 mysqldump 。

    ⑥ 解锁主库,unlock tables;

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

    ⑧ 根据主库的 show master status 查看 binlog 的位置状态,在从库执行 change master to ... 语句验证 rep 用户。

    ⑨ 从库开启同步开关,start slave。

    ⑩ 从库 show slave statusG,检查同步状态,并在主库进行更新测试。

    六:重新做主从,完全同步 
    该方法适用于主从库数据相差较大,或者要求数据完全统一的情况 
    解决步骤如下: 
    1.先进入主库,进行锁表,防止数据写入 
    使用命令: 
    mysql> flush tables with read lock; 
    注意:该处是锁定为只读状态,语句不区分大小写 
    2.进行数据备份 
    #把数据备份到mysql.bak.sql文件 
    [root@server01 mysql]#mysqldump -uroot -p -hlocalhost 数据库名> mysql.bak.sql 
    这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失 
    3.查看master 状态 
    mysql> show master status; 
    +-------------------+----------+--------------+-------------------------------+ 
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
    +-------------------+----------+--------------+-------------------------------+ 
    | mysqld-bin.000001 | 3260 | | mysql,test,information_schema | 
    +-------------------+----------+--------------+-------------------------------+ 
    1 row in set (0.00 sec) 
    4.把mysql备份文件传到从库机器,进行数据恢复 
    #使用scp命令 
    [root@server01 mysql]# scp mysql.bak.sql root@192.168.128.101:/tmp/ 
    5.停止从库的状态 
    mysql> stop slave; 
    6.然后到从库执行mysql命令,导入数据备份 
    mysql> source /tmp/mysql.bak.sql 
    7.设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项 
    change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260; 
    8.重新开启从同步 
    mysql> stop slave; 
    9.查看同步状态 
    mysql> show slave statusG 查看: 
    Slave_IO_Running: Yes 
    Slave_SQL_Running: Yes 

    10.主库解锁

    mysql> unlock tables;

  • 相关阅读:
    安装 macbook 双系统( OS X 和 Ubuntu )
    微信小程序初探
    [Javascript] Promise
    [AS/400] 基本概念
    [AS/400] Control Language(CL) 基本概念
    [AS/400] Control Language
    [github] 创建个人网页
    [tools] sublime 使用记录
    [Java] TreeMap
    exe转msi
  • 原文地址:https://www.cnblogs.com/hiit/p/11459160.html
Copyright © 2011-2022 走看看