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)的通信。
  • 定期监控复制状态和日志文件的增长情况。
  • 考虑设置日志轮转策略,以防止日志文件占用过多磁盘空间。
  • 实施适当的备份策略,不要仅依赖于复制作为唯一的数据保护措施。
相关推荐
小白也想学C几秒前
Android 功耗分析(底层篇)
android·功耗
曙曙学编程8 分钟前
初级数据结构——树
android·java·数据结构
闲暇部落2 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
耗同学一米八3 小时前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题二
运维·网络·mariadb
诸神黄昏EX4 小时前
Android 分区相关介绍
android
大白要努力!5 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
Estar.Lee5 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
Winston Wood6 小时前
Perfetto学习大全
android·性能优化·perfetto
Dnelic-8 小时前
【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录
android·junit·单元测试·android studio·自学笔记
Eastsea.Chen11 小时前
MTK Android12 user版本MtkLogger
android·framework