• MySQL主从复制


    MySQL

    1. 主数据库配置

    [mysqld]
    server-id = 1        # 节点ID,确保唯一
    
    # log config
    log-bin = mysql-bin     #开启mysql的binlog日志功能
    sync_binlog = 1         #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
    binlog_format = mixed   #binlog日志格式,mysql默认采用statement,建议使用mixed
    expire_logs_days = 7                           #binlog过期清理时间
    max_binlog_size = 100m                    #binlog每个日志文件大小
    binlog_cache_size = 4m                        #binlog缓存大小
    max_binlog_cache_size= 512m              #最大binlog缓存大
    binlog-ignore-db=mysql #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行
    
    auto-increment-offset = 1     # 自增值的偏移量
    auto-increment-increment = 1  # 自增值的自增量
    slave-skip-errors = all #跳过从库错误
    

    2. 从数据库配置加入

    server-id=2
    relay-log=slave-relay-bin
    relay-log-index=slave-relay-bin.index
    #replicate-do-db=test
    #备注:
    #server-id 服务器唯一标识,如果有多个从服务器,每个服务器的server-id不能重复,跟IP一样是唯一标识,如果你没设置server-id或者设置为0,则从服务器不会连接到主服务器。
    #relay-log 启动MySQL二进制日志,可以用来做数据备份和崩溃恢复,或主服务器挂掉了,将此从服务器作为其他从服务器的主服务器。
    #replicate-do-db 指定同步的数据库,如果复制多个数据库,重复设置这个选项即可。若在master端不指定binlog-do-db,则在slave端可用replication-do-db来过滤。
    #replicate-ignore-db 不需要同步的数据库,如果有多个数据库,重复设置这个选项即可。
    

    3. 重启主和从数据库

    service mysql restart
    

    4. 主数据库查看master状态

    show master status
    
    MariaDB [(none)]> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000005      120|              | mysql            |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    

    5. 从数据库进入mysql配置

    MariaDB [(none)]> CHANGE MASTER TO 
    MASTER_HOST = '172.17.0.3',  
    MASTER_USER = 'repl_user', 
    MASTER_PASSWORD = 'repl_passwd',
    MASTER_PORT = 3307,
    MASTER_LOG_FILE='mysql-bin.000005',
    MASTER_LOG_POS=120,
    MASTER_RETRY_COUNT = 60,
    MASTER_HEARTBEAT_PERIOD = 10000; 
    # MASTER_USER = 'repl_user', # 主库的账号
    # MASTER_PASSWORD = 'repl_passwd', # 主库的密码
    # MASTER_LOG_FILE='mysql-bin.000005',#与主库File 保持一致
    # MASTER_LOG_POS=120 , #与主库Position 保持一致
    

    6. 从数据库开启slave进程

    MariaDB [(none)]> start slave;
    Query OK, 0 rows affected (0.002 sec)
    

    7. 查看同步状态

    MariaDB [(none)]> show slave statusG;
    *************************** 1. row ***************************
                    Slave_IO_State: Waiting for master to send event
                       Master_Host: 120.78.176.77
                       Master_User: root
                       Master_Port: 3306
                     Connect_Retry: 60
                   Master_Log_File: mysql-bin.000002
               Read_Master_Log_Pos: 154
                    Relay_Log_File: PC-202008301542-relay-bin.000002
                     Relay_Log_Pos: 422
             Relay_Master_Log_File: mysql-bin.000002
                  Slave_IO_Running: Yes
                 Slave_SQL_Running: Yes
                   Replicate_Do_DB:
               Replicate_Ignore_DB:
                Replicate_Do_Table:
            Replicate_Ignore_Table:
           Replicate_Wild_Do_Table:
       Replicate_Wild_Ignore_Table:
                        Last_Errno: 0
                        Last_Error:
                      Skip_Counter: 0
               Exec_Master_Log_Pos: 154
                   Relay_Log_Space: 741
                   Until_Condition: None
                    Until_Log_File:
                     Until_Log_Pos: 0
                Master_SSL_Allowed: No
                Master_SSL_CA_File:
                Master_SSL_CA_Path:
                   Master_SSL_Cert:
                 Master_SSL_Cipher:
                    Master_SSL_Key:
             Seconds_Behind_Master: 0
     Master_SSL_Verify_Server_Cert: No
                     Last_IO_Errno: 0
                     Last_IO_Error:
                    Last_SQL_Errno: 0
                    Last_SQL_Error:
       Replicate_Ignore_Server_Ids:
                  Master_Server_Id: 1
                    Master_SSL_Crl:
                Master_SSL_Crlpath:
                        Using_Gtid: No
                       Gtid_IO_Pos:
           Replicate_Do_Domain_Ids:
       Replicate_Ignore_Domain_Ids:
                     Parallel_Mode: optimistic
                         SQL_Delay: 0
               SQL_Remaining_Delay: NULL
           Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
                  Slave_DDL_Groups: 0
    Slave_Non_Transactional_Groups: 0
        Slave_Transactional_Groups: 0
    1 row in set (0.000 sec)
    
    # 出现这两个说明同步成功
    # Slave_IO_Running: Yes
    # Slave_SQL_Running: Yes
    

    问题

    ERROR 1201 (HY000): Could not initialize master info structure for ''; more error messages can be found in the MariaDB error log
    

    如果在操作到遇到上面问题的报错,就执行下面这句, 继续从第5步开始

    MariaDB [(none)]> reset slave;
    Query OK, 0 rows affected (0.037 sec)
    
    此时此刻,非我莫属
  • 相关阅读:
    CRUD工程师——嵌入式Web容器
    CRUD工程师——SpringBoot启动原理
    CRUD工程师——日志
    CRUD工程师——慢SQL
    CRUD工程师——索引
    前端专业术语: shim 和 Polyfill,了解下
    H5之postMessage 。实现跨域
    摘抄详细的VUE生命周期
    如何在不使用三大地图的KEY和相关组件的情况下,直接传参数到相关的H5地图
    Mac下通过brew安装指定版本的nodejs
  • 原文地址:https://www.cnblogs.com/taozhengquan/p/14956743.html
Copyright © 2020-2023  润新知