mariadb主从配置步骤

mariadb主从配置步骤

  • 配置开始前注意关闭主从服务器的防火墙或者确保主从服务器之间数据库通信正常;
主服务器(主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. 创建复制用户并授权:

sql 复制代码
CREATE USER 'root1'@'从IP' IDENTIFIED BY 'root1';
GRANT REPLICATION SLAVE ON *.* TO 'root1'@'从IP';
FLUSH PRIVILEGES;

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

sql 复制代码
SHOW MASTER STATUS;

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

h. 退出MariaDB:

sql 复制代码
EXIT;
从服务器(从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 值):

sql 复制代码
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. 启动从服务器复制进程:

sql 复制代码
START SLAVE;

h. 检查从服务器状态:

sql 复制代码
SHOW SLAVE STATUS\G

确保 Slave_IO_Running 和 Slave_SQL_Running 都显示为 Yes。

i. 退出MariaDB:

sql 复制代码
EXIT;
验证复制

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

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

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

sql 复制代码
SHOW DATABASES;
USE testdb;
SHOW TABLES;
SELECT * FROM testtable;
问题处理:

问题示例:

   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) 确保复制用户在主服务器上拥有必要的权限。在主服务器上,创建了一个具有复制权限的用户:

sql 复制代码
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_ip' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

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

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

a) 停止从服务器:

sql 复制代码
STOP SLAVE;

b) 重置从服务器:

sql 复制代码
RESET SLAVE;

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

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

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

d) 启动从服务器:

sql 复制代码
START SLAVE;

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

sql 复制代码
SHOW SLAVE STATUS\G

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

其他注意事项:
  • 确保 MariaDB 服务有权限写入 /var/log/mariadb/ 目录。
  • 检查两台服务器的防火墙设置,确保允许 MariaDB 端口(默认 3306)的通信。
  • 定期监控复制状态和日志文件的增长情况。
  • 考虑设置日志轮转策略,以防止日志文件占用过多磁盘空间。
  • 实施适当的备份策略,不要仅依赖于复制作为唯一的数据保护措施。
相关推荐
CCTV果冻爽1 小时前
Android 源码集成可卸载 APP
android
别不开心ovo2 小时前
【测试】ADB常用命令
adb
Python私教3 小时前
Python ORM 框架 SQLModel 快速入门教程
android·java·python
编程乐学4 小时前
基于Android Studio 蜜雪冰城(奶茶饮品点餐)—原创
android·gitee·android studio·大作业·安卓课设·奶茶点餐
problc5 小时前
Android中的引用类型:Weak Reference, Soft Reference, Phantom Reference 和 WeakHashMap
android
IH_LZH5 小时前
Broadcast:Android中实现组件及进程间通信
android·java·android studio·broadcast
去看全世界的云5 小时前
【Android】Handler用法及原理解析
android·java
机器之心5 小时前
o1 带火的 CoT 到底行不行?新论文引发了论战
android·人工智能
机器之心6 小时前
从架构、工艺到能效表现,全面了解 LLM 硬件加速,这篇综述就够了
android·人工智能