zoukankan      html  css  js  c++  java
  • mysql主从复制同步

    主master : 192.168.8.10

    • 开启二进制日志
    • 配置唯一的server-id
    • 获得master二进制日志文件名及位置
    • 创建一个用于slave和master通信的用户账号

    从slave : 192.168.8.11

    • 配置唯一的server-id
    • 使用master分配的用户账号读取master二进制日志
    • 启用slave服务

    1、配置主库:
    1)、授权给从数据库服务器
    mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'192.168.8.11' identified by 'b5HMLIWQSdT630Dp';

    mysql>FLUSH PRIVILEGES;

    ## 查看MySQL现在有哪些用户及对应的IP权限
    mysql> select user,host from mysql.user;

    2)、修改主库配置文件,开启binlog,并设置server-id,每次修改配置文件后都要重启mysql服务才会生效

    在该配置文件[mysqld]下面添加下面内容:

    [mysqld]
    log-bin=/var/lib/mysql/binlog
    server-id=1
    binlog-do-db = cmdb
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock

    server-id:master端的ID号;
    log-bin:同步的日志路径及文件名,一定注意这个目录要是mysql有权限写入的(我这里是偷懒了,直接放在了下面那个datadir下面);
    binlog-do-db:要同步的数据库名
    还可以显示 设置不同步的数据库:
    binlog-ignore-db = mysql 不同步mysql库和test库
    binlog-ignore-db = test

    3)、查看主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复
    mysql> show master status;

    +-------------------+-----------+--------------+------------------+-------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-------------------+-----------+--------------+------------------+-------------------+
    | mysqld-bin.000121 | 514780853 | | | |
    +-------------------+-----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)


    2、配置从库

    1)、理所当然也是从配置文件着手,在/etc/my.cnf 添加下面配置:

    [mysqld]
    server-id=2  //必须是唯一的

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

    说明mysql不认识这些变量,网上搜罗了一番,原因是mysql5.5+版本主从复制不支持这些变量,需要在从库上用命令来设置:

    mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.10',
      MASTER_PORT=3306,
      MASTER_USER='slave',
      MASTER_PASSWORD='b5HMLIWQSdT630Dp',
      MASTER_LOG_FILE='mysql-bin.000071',
      MASTER_LOG_POS=120; #后面两个参数的值与主库保持一致
    MASTER_CONNECT_RETRY=10;

    mysql> CHANGE MASTER TO MASTER_HOST='111.230.144.106',
    -> MASTER_PORT=3306,
    -> MASTER_USER='slave2',
    -> MASTER_PASSWORD='b5HMLIWQSdT630Dp',
    -> MASTER_LOG_FILE='mysqld-bin.000121',
    -> MASTER_LOG_POS=514780853,
    -> MASTER_CONNECT_RETRY=10;


    2)、启动slave进程
    mysql> start slave;
    错误error 1872
    执行重置
    reset slave;
    Query OK, 0 rows affected (0.04 sec)

    3)、查看slave的状态,
    show slave status;
    如果下面两项值为YES,则表示配置正确:
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    从库正在等待主库更新数据。。。Waitin for master to send event...


    三、同步主库已有数据到从库

    主库操作:
    1、停止主库的数据更新操作
    mysql>flush tables with read lock;
    2、新开终端,生成主数据库的备份(导出数据库)
    [root@zhoujietest ~]# mysqldump -uroot -ptest123 cmdb > cmdb.sql
    3、将备份文件传到从库
    [root@zhoujietest ~]# scp cmdb.sql root@192.168.8.11:/root/
    4、主库解锁
    mysql>unlock tables;

    然后在主服务器上查询当前二进制文件的文件名及偏移位置:

    mysql > show master status;

    然后停止主服务器上的MySQL服务:

    shell> mysqladmin -u root shutdown

    从库操作:
    1、停止从库slave
    mysql>slave stop;
    2、新建数据库cmdb
    mysql> create database cmdb default charset utf8;
    3、导入数据
    [root@ops-dev ~]# mysql -uroot -ptest123 cmdb<cmdb.sql
    4、查看从库已有该数据库和数据
    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | cmdb |
    | mysql |
    | performance_schema |
    | test |
    +--------------------+

    此时主从库的数据完全一致,如果对主库进行增删改操作,从库会自动同步进行操作。

  • 相关阅读:
    失眠食療
    学会妥协学会弯腰(下册)
    软件工程(第4版·修订版)
    GitHub入门与实践
    iOS开发:从零基础到精通
    Premiere Pro CS6高手成长之路
    网页设计与前端开发从入门到精通Dreamweaver+Flash+Photoshop+HTML+CSS+JavaScript
    CINEMA 4D R17 完全学习手册(第2版)
    1040. 二叉树层次遍历
    1041. 二哥打飞机
  • 原文地址:https://www.cnblogs.com/Christine-ting/p/10481805.html
Copyright © 2011-2022 走看看