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)的通信。
  • 定期监控复制状态和日志文件的增长情况。
  • 考虑设置日志轮转策略,以防止日志文件占用过多磁盘空间。
  • 实施适当的备份策略,不要仅依赖于复制作为唯一的数据保护措施。
相关推荐
Digitally3 分钟前
如何在安卓手机/平板上找到下载文件?
android·智能手机·电脑
硬件学长森哥3 小时前
Android影像基础--cameraAPI2核心流程
android·计算机视觉
前行的小黑炭8 小时前
Android 协程的使用:结合一个环境噪音检查功能的例子来玩玩
android·java·kotlin
阿华的代码王国8 小时前
【Android】内外部存储的读写
android·内外存储的读写
练小杰11 小时前
【Mysql-installer-community-8.0.26.0】Mysql 社区版(8.0.26.0) 在Window 系统的默认安装配置
数据库·sql·mysql·adb·配置文件·mysql安装·关系型数据库
inmK111 小时前
蓝奏云官方版不好用?蓝云最后一版实测:轻量化 + 不限速(避更新坑) 蓝云、蓝奏云第三方安卓版、蓝云最后一版、蓝奏云无广告管理工具、安卓网盘轻量化 APP
android·工具·网盘工具
giaoho11 小时前
Android 热点开发的相关api总结
android
咖啡の猫13 小时前
Android开发-常用布局
android·gitee
程序员老刘14 小时前
Google突然“变脸“,2026年要给全球开发者上“紧箍咒“?
android·flutter·客户端
Tans514 小时前
Androidx Lifecycle 源码阅读笔记
android·android jetpack·源码阅读