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)的通信。
  • 定期监控复制状态和日志文件的增长情况。
  • 考虑设置日志轮转策略,以防止日志文件占用过多磁盘空间。
  • 实施适当的备份策略,不要仅依赖于复制作为唯一的数据保护措施。
相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone2 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc2 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo2 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077002 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone2 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui