当前位置: 首页 > article >正文

mariadb主从配置步骤

mariadb主从配置步骤

  • 配置开始前注意关闭主从服务器的防火墙或者确保主从服务器之间数据库通信正常;
  1. 主服务器(主IP)配置

    a. 编辑主服务器的MariaDB配置文件:

    sudo vim /etc/my.cnf.d/mariadb-server.cnf
    

    b. 在 [mysqld] 部分添加或修改以下内容:

    [mysqld]
    server-id = 1
    log-bin = /var/log/mariadb/mysql-bin
    binlog-format = ROW
    bind-address = 主IP
    

    c. 保存并关闭文件。

    d. 重启MariaDB服务:

    sudo systemctl stop mariadb
    sudo systemctl start mariadb
    

    e. 登录到MariaDB:

    mysql -u root -p
    

    f. 创建复制用户并授权:

    CREATE USER 'root1'@'从IP' IDENTIFIED BY 'root1';
    GRANT REPLICATION SLAVE ON *.* TO 'root1'@'从IP';
    FLUSH PRIVILEGES;
    

    g. 获取主服务器状态信息:

    SHOW MASTER STATUS;
    

    记下 File 和 Position 的值,稍后在从服务器配置中会用到

    h. 退出MariaDB:

    EXIT;
    
  2. 从服务器(从IP)配置:

    a. 编辑从服务器的MariaDB配置文件:

    sudo nano /etc/my.cnf.d/mariadb-server.cnf
    

    b. 在 [mysqld] 部分添加或修改以下内容:

    [mysqld]
    server-id = 2
    relay-log = /var/log/mariadb/mysql-relay-bin
    log_slave_updates = 1
    read_only = 1
    bind-address = 从ip
    

    c. 保存并关闭文件。

    d. 重启MariaDB服务:

    sudo systemctl stop mariadb
    sudo systemctl start mariadb
    

    e. 登录到MariaDB:

    mysql -u root -p
    

    f. 设置主服务器信息(使用之前记下的 File 和 Position 值):

    CHANGE MASTER TO
      MASTER_HOST='主IP',
      MASTER_USER='root1',
      MASTER_PASSWORD='root1',
      MASTER_LOG_FILE='mysql-bin.000001',  -- 使用实际的 File 值
      MASTER_LOG_POS=123;  -- 使用实际的 Position 值
    

    g. 启动从服务器复制进程:

    START SLAVE;
    

    h. 检查从服务器状态:

    SHOW SLAVE STATUS\G
    

    确保 Slave_IO_Running 和 Slave_SQL_Running 都显示为 Yes。

    i. 退出MariaDB:

    EXIT;
    
  3. 验证复制

    a. 在主服务器上创建一个测试数据库和表:

    CREATE DATABASE testdb;
    USE testdb;
    CREATE TABLE testtable (id INT, name VARCHAR(50));
    INSERT INTO testtable VALUES (1, 'Test Data');
    

    b. 在从服务器上检查是否复制成功:

    SHOW DATABASES;
    USE testdb;
    SHOW TABLES;
    SELECT * FROM testtable;
    
  4. 问题处理:

    问题示例:

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

    问题处理:

    1. 更改主服务器时的错误:
      错误消息 “Could not initialize master info structure”(无法初始化主服务器信息结构)通常发生在复制配置或权限出现问题:

    a) 首先,让我们查看 MariaDB 错误日志以获取更详细的信息:

    sudo tail -n 50 /var/log/mysql/error.log
    

    sudo tail -n 50 /var/log/mariadb/mariadb.log
    

    具体路径可能因系统配置而异。

    b) 确保复制用户在主服务器上拥有必要的权限。在主服务器上,创建了一个具有复制权限的用户:

    GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_ip' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    

    c) 检查主日志文件和位置是否正确。使用的值(‘mysql-bin.000001’ 和 798)可能不是最新的。在主服务器上使用以下命令检查当前值:

    SHOW MASTER STATUS;
    
    1. 从服务器状态:
      SHOW SLAVE STATUS\G 输出中,我们可以看到:
    • 从服务器当前没有运行(IO 和 SQL 线程都是 “No”)
    • 主日志文件与设置的不同(‘mysql-bin.000006’ 对比 ‘mysql-bin.000001’)
    1. 故障排除步骤:

    a) 停止从服务器:

    STOP SLAVE;
    

    b) 重置从服务器:

    RESET SLAVE;
    

    c) 使用正确的信息重新配置主服务器。确保使用主服务器上的当前主日志文件和位置:

    CHANGE MASTER TO
      MASTER_HOST='从IP',
      MASTER_USER='root',
      MASTER_PASSWORD='root',
      MASTER_LOG_FILE='mysql-bin.000006',
      MASTER_LOG_POS=385;
    

    注意:出于安全原因,不建议使用 ‘root’ 作为复制用户。最好为复制创建一个专用用户。

    d) 启动从服务器:

    START SLAVE;
    

    e) 再次检查从服务器状态:

    SHOW SLAVE STATUS\G
    

    查看 Slave_IO_Running: YesSlave_SQL_Running: Yes。如果它们都是 “Yes”,则复制应该正在工作。

  5. 其他注意事项:
    • 确保 MariaDB 服务有权限写入 /var/log/mariadb/ 目录。
    • 检查两台服务器的防火墙设置,确保允许 MariaDB 端口(默认 3306)的通信。
    • 定期监控复制状态和日志文件的增长情况。
    • 考虑设置日志轮转策略,以防止日志文件占用过多磁盘空间。
    • 实施适当的备份策略,不要仅依赖于复制作为唯一的数据保护措施。

http://www.kler.cn/a/303103.html

相关文章:

  • three.js 杂记
  • 基于迭代重加权最小二乘法的算法及例程
  • Linux手动安装nginx
  • 【韩老师零基础30天学会Java 】07章 面向对象编程(基础)
  • 记录日志中logback和log4j2不能共存的问题
  • sql server启用远程连接与修改默认端口
  • 苹果CMS影视程序被举报侵权?有效解决方案指南
  • 从 Greenplum 到 Databend,数据仓库的开源新选择
  • 自定义WPF滑块样式-Slider
  • 桥接模式详解和分析JDBC中的应用
  • 微信小程序开发——比较两个数字大小
  • JavaScript知识点2
  • 告别繁琐,IsMyHdOK硬盘测速,即刻享受科技便利
  • 安全工具 | 使用Burp Suite的10个小tips
  • Apache SeaTunnel Committer 进阶指南
  • 数据结构和算法之基本概念
  • Azure web app has no access to openai private endpoint in virtual network
  • 4G物联网智能电表是什么?什么叫4G物联网智能电表?
  • 参数传了报错没传参数识别不到参数传丢
  • ‌汽车的舒适进入功能是什么意思?
  • 【区块链 + 人才服务】Blockchain Workshop- 区块链编程实践平台 | FISCO BCOS应用案例
  • Maven从入门到精通(二)
  • 设计模式-行为型模式-备忘录模式
  • 关于.net Framework向.net core的移植
  • HarmonyOS SDK开放能力简介
  • 基于学习功能聚合的英语口语学习APP