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: Yes 和 Slave_SQL_Running: Yes。如果它们都是 "Yes",则复制应该正在工作。
5.

其他注意事项:
  • 确保 MariaDB 服务有权限写入 /var/log/mariadb/ 目录。
  • 检查两台服务器的防火墙设置,确保允许 MariaDB 端口(默认 3306)的通信。
  • 定期监控复制状态和日志文件的增长情况。
  • 考虑设置日志轮转策略,以防止日志文件占用过多磁盘空间。
  • 实施适当的备份策略,不要仅依赖于复制作为唯一的数据保护措施。
相关推荐
传奇开心果编程1 天前
【Jetpack Compose娓娓道来】 第25课:ViewModel就是UI界面的大脑
android·kotlin·移动开发·jetpack compose·编程语言理论·编程框架·声明式ui
马立杰1 天前
PHP 未授权 RCE 应急响应:CVE-2026-109618 CVE-2026-109619 排查与加固实战
android·开发语言·php
NamoAmitabha1281 天前
安装“编译器环境”(Android Studio)--deepseek--Cocos --Creator3.8.8
android·ide·android studio
2501_915106321 天前
跨平台抓包工具怎么选?TraceEagle抓包鹰 的四种跨平台能力
网络协议·计算机网络·网络安全·ios·adb·https·udp
聚美智数1 天前
文档转换 API‑文档转 PDF‑PDF 转文档‑异步文档处理‑文件格式迁移‑转换结果回调推送 API 接口介绍
android·java·pdf
booboosui1 天前
Android 上的无人回合:只放开 2 类工具,宁可空手
android
事圆则缓1 天前
Android 性能排查实战:怎么看内存抖动、CPU 占用和 FPS
android
mmsx1 天前
Android 三类「看着无关」的故障:大事务、UI 阻塞与 ViewModel 作用域
android·ui
换元不配限1 天前
Android 休眠与唤醒完全指南:从手机到 IoT 设备的实战解析
android·物联网·智能手机·alarmmanager·wakelock·workmanager·休眠和唤醒
通信侠1 天前
android 16触摸提示音Back虚拟按键无声
android