zoukankan      html  css  js  c++  java
  • 创建一个已经存在数据的MySQL复制

    1.配置master库
    必须开启二进制日志和分配唯一的server id
    ·如果没设置server-id或将其设置为0,master节点会拒绝slave的连接
    ·建议在master节点设置innodb_flush_log_at_trx_commit=1和sync_binlog=1,保证复制环境事务的持久性和一致性
    ·不要在master节点开启skip-networking,否则网络断开后,slave节点就无法连接到master节点

    # vim /etc/my.cnf
    [mysqld]
    server-id=1
    log-bin=mysql-bin
    

    2.master库中创建用于复制的用户

    建议创建一个单独的用户用于复制(用户名和密码都会被存放在一个纯文本文件master.info中)

    mysql> create user 'repl'@'%.mydomain.com' identified by 'slavepass';
    mysql> grant replication slave,replication client on *.* to 'repl'@'%.mydomain.com';

    3.配置salve库
    配置唯一的server-id
    slave节点可以不开启二进制日志,但是开启了二进制日志后,可以在slave节点进行数据备份和crash恢复操作
    如果开启参数report-host=hostname,则可以在master节点使用命令"show slave hosts" 

    # vim /etc/my.cnf
    [mysqld]
    server-id=2
    relay_log=/var/mysql/log/mysql-relay-bin
    log_slave_updates=1   #备库将其重放事件也记录到自身的二进制日志中(会给服务器增加额外负担)
    read_only=1
    

    4.获取master的当前状态

    启动复制必须要告诉slave节点从哪里开始复制,即master节点的二进制日志的当前位置

    (1)在master节点,开启一个会话执行以下命令:

    mysql> flush tables with read lock;

    执行该命令会flush所有的表并阻塞其它对master的写操作。如果是innodb表,也会阻塞提交操作。
    (2)在master节点,开启另一会话执行以下命令:

    mysql > show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000003 | 73       | test         | manual,mysql     |
    +------------------+----------+--------------+------------------+

    5.原始数据同步到复制节点

    (1)导出数据

    # mysqldump --all-databases --master-data > fulldb.dump 
    mysql> unlock tables;
    mysql> exit;
    

    (2)将导出数据文件传送到复制节点

    (3)启动slave,加上参数--skip-slave-start(不开启复制)

    (4)在复制节点导入数据

    # mysql < fulldb.dump
    
    如果数据库较大,拷贝裸数据文件的效率会比mysqdump快。 最好是shutdown database进行冷拷贝
    (1)将数据文件拷贝解压到相应的目录
    (2)启动slave,加上参数--skip-slave-start(不开启复制)
    

    6.使用master位置信息配置slave(二进制文件的名称和位置)

    mysql> change master to
        ->     master_host='master_host_name',
        ->     master_user='replication_user_name',
        ->     master_password='replication_password',
        ->     master_log_file='recorded_log_file_name',
        ->     master_log_pos=recorded_log_position;

    7.启动slave

    mysql> start slave;
    
  • 相关阅读:
    7--SpringCloud:Config/Bus周阳老师
    6--SpringCloud:服务网关 gateway周阳老师
    5--SpringCloud:Hystrix 断路器周阳老师
    4--SpringCloud-Ribbon/OpenFeign周阳老师
    3--SpringCloud 和 Zookeeper周阳老师
    seata启动报错的可能原因,以及解决方案
    linux中Mysql的安装
    解决Nginx启动的一些问题
    svg配置与less在vue中使用
    微信小程序day01-基础认识到轮播图组件
  • 原文地址:https://www.cnblogs.com/abclife/p/4908642.html
Copyright © 2011-2022 走看看