zoukankan      html  css  js  c++  java
  • mariadb单机多实例主从复制

    准备工作:

    停掉数据库服务:

    systemctl stop mariadb.service

    将主库的数据库文件拷贝一份作为从库数据:

    cp -a -r /data/mysql_data/mysql/* /data/mysql_data/mysql2/

    拷贝完启动:

     systemctl start mariadb.service

    步骤1:配置主库和从库多实例的cnf文件

    主库和从库共用一个cnf文件, /etc/my.cnf

    [mysqld]

    log-bin=mysql-bin-log

    server-id=1 

    datadir=/data/mysql_data/mysql

    socket=/data/mysql_data/mysql/mysql.sock

    innodb_flush_log_at_trx_commit=1

    sync_binlog=1

    pid-file=/run/mariadb/mariadb.pid

    注意:为了使用事务的InnoDB在复制中最大的持久性和一致性,你应该指定innodb_flush_log_at_trx_commit=1,sync_binlog=1选项

    [mysqld3307]

    port=3307(单机多实例必须指定不同于3306的端口)

    log-bin=mysql-bin-log

    server-id=2  (不同于主库实例的id)

    datadir=/data/mysql_data/mysql2

    socket=/data/mysql_data/mysql2/mysql3307.sock

    pid-file=/run/mariadb/mariadb3307.pid

    步骤2:创建一个复制权限的账号:

    mysql会赋予一些特殊的权限给复制线程,在备库运行的I/O线程会建立一个到主库的

    TCP/IP连接,这意味着必须在主库创建一个用户,并赋予其合适的权限,备库I/O线程以该用户名连接到主库并读取其二进制日志,    

    创建用户账号语句:

    mysql> CREATE USER repl@127.0.0.1;

    mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.*

            -> TO repl@'127.0.0.1' INDENTIFIED BY 'repl';

    我们再主库和备库都创建该账号,注意我们把这个账户限制在本地网络,因为这是一个特权账号(尽管该账号无法执行select或修改数据,但仍然能从二进制日志中获得一些数据)

    步骤3:锁定主机,注意二进制日志的位置并备份主机数据库

    在主机上执行FLUSH TABLES WITH READ LOCK语句来刷新所有的表并阻断写操作:

    master> FLUSH TABLES WITH READ LOCK;

    当FLUSH TABLES WITH READ LOCK中的读操作锁生效时,用以下命令在主机读取当前的二进制日志名称和偏差的值:

    master> SHOW MASTER STATUS;

    File:         mysql-bin-log.000001

    Positin:   1234

    该命令显示列出了当前主库使用的binlog文件名File,和日志在文件中的偏差量Position,这两个参数在后面设置从库的时候会用到。它们代表了从库什么时候开始处理新的更新的坐标。

    注意:如果之前主机没有开启bin-log功能,用SHOW MASTER STATUS命令显示的日志文件和position值为空,如果是这种情况,那么你后面要在从机日志里面指定的名称和positon值应该是空字符串('')和4.

    接下来,继续在主库客户端窗口执行 FLUSH TABLES WITH READ LOCK;

    注意:你可以使用以下命令在主机上重新打开写操作功能:

    master> UNLOCK TABLES;

    步骤4:初始化复制

    连接从库:mysql -S /data/mysql_data/mysql2/mysql3307.sock

    现在我们准备好在从库实例上初始化复制了。在从库实例上执行以下命令:

    slave> SLAVE STOP;

    接着,你要输入一条CHANGE MASTER 命令:

    slave> CHANGE MASTER TO MASTER_HOST='127.0.0.1',

           -> MASTER_USER='repl',

           -> MASTER_PASSWORD='repl'

           -> MASTER_LOG_FILE='mysql-bin-log.000001',

           -> MASTER_LOG_POS=1234;

    参数含义:

    • MASTER_HOST:主库的ip
    • MASTER_USER:步骤2中授予REPLICATION SLAVE权限的用户
    • MASTER_PASSWORD:repl用户的密码
    • MASTER_LOG_FILE:show master status中的文件名
    • MASTER_LOG_POS: show master status中的position

    最后在从库实例上开始复制:

    slave> start slave;

    步骤5:基础检查

    进行数据插入来检验是否复制成功

    也可以用下面的命令检查状态:

    mysql> SHOW SLAVE STATUSG;

    mysql> SHOW PROCESSLISTG;

  • 相关阅读:
    python自动化测试-D9-学习笔记之二(线程锁)
    python习题:封装好的测试报告(report.py)
    python自动化测试-D9-学习笔记之二(守护线程)
    python自动化测试-D9-学习笔记之二(多线程)
    python自动化测试-D9-学习笔记之一(线程池)
    python自动化测试-D9-学习笔记之一(unittest模块)
    python习题:写一个备份数据库的脚本
    python习题:【多线程】有100个数据,启动5个线程,每个线程分20个数据,怎么把这20个数据分别传给每个线程。
    自然语言处理NLTK之入门
    python画一颗拳头大的💗
  • 原文地址:https://www.cnblogs.com/rebaomi/p/5405836.html
Copyright © 2011-2022 走看看