1panel数据库mysql配置主从同步

云泽 发布于 1 天前 13 次阅读 最后更新于 1 天前


AI 摘要

如何在1panel面板实现MySQL秒级主从同步?本文以Debian12环境为例,详解GTID配置技巧与容器化操作要点。从二进制日志参数优化到主从账号权限设置,手把手教你避开"Slave_IO_Running"报错陷阱,揭秘1panel数据库界面同步显示的特殊处理机制。

1.什么是主从同步

主:master

从:slave

一台或多台服务器作为主数据库进行读写操作,多台服务器做从服务器数据库。主数据库的数据会自动复制到从数据库。

实现流程:主数据库对数据进行修改并记录到二进制文件,从服务器根据主服务器的二进制文件来进行同步更新操作。

框架示意

              +-------------+
              |   Master    |
              | (server_id=1)|
              +------▲------+
                     ║
      +--------------╨--------------+
      ║                             ║
+-----╨----+                 +-----╨----+
|  Slave1  |                 |  Slave2  |
| (id=2)   |                 | (id=3)   |
+----------+                 +----------+

2.配置一主多从同步

环境:debian12,1panel(v1.10.28-lts),mysql(8.0.41)

这个是1panel的默认配置文件

[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
log_error_suppression_list='MY-013360'

character_set_server=utf8
lower_case_table_names=1
group_concat_max_len=1024000
log_bin_trust_function_creators=1

pid-file=/var/run/mysqld/mysqld.pid
max_connections=300
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

我将对其增加配置,内容如下:

主服务器(Master)

[mysqld]
# ======== 原有基础配置 ======== #
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
log_error_suppression_list='MY-013360'
character_set_server=utf8
lower_case_table_names=1
group_concat_max_len=1024000
log_bin_trust_function_creators=1
pid-file=/var/run/mysqld/mysqld.pid

# ======== 新增主库复制配置 ======== #
server_id = 1                   # 主库唯一标识(必填,不可与其他节点重复)
log_bin = /var/lib/mysql/mysql-bin.log  # 开启二进制日志(必填)
binlog_format = ROW             # 行级复制(推荐)
expire_logs_days = 7            # 自动清理7天前的日志
max_binlog_size = 100M          # 单个二进制日志文件大小

# GTID 配置(推荐)
gtid_mode = ON                  # 启用 GTID
enforce_gtid_consistency = ON   # 强制 GTID 一致性

[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

从服务器(Slave1)

配置如下

[mysqld]
# ======== 原有基础配置 ======== #
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
log_error_suppression_list='MY-013360'
character_set_server=utf8
lower_case_table_names=1
group_concat_max_len=1024000
log_bin_trust_function_creators=1
pid-file=/var/run/mysqld/mysqld.pid

# ======== 新增从库复制配置 ======== #
server_id = 2                   # 从库唯一标识
relay_log = /var/lib/mysql/mysql-relay-bin  # 中继日志路径
read_only = 1                   # 从库设为只读(防止误写)
log_slave_updates = 1           # 级联复制时需启用

# GTID 配置(与主库一致)
gtid_mode = ON
enforce_gtid_consistency = ON

[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

剩下的从服务器只需要修改server_id即可,注意,此id为唯一id,不可与其他节点重复

在配置完配置之后,1panel会提醒重启mysql,如未提醒,请手动重启msyql

创建主从数据库同步账号

插曲:

1panel中如何执行sql,可以在容器界面,选择msyql进入容器,mysql的root密码可以在数据库界面的连接信息查看

mysql -u root -p 密码

此时就会就入sql的命令输入界面。

在主库执行

-- 创建复制专用账号(
CREATE USER 'repl_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;

在每一个从库都要执行

-- 配置主库信息
CHANGE MASTER TO
  MASTER_HOST = '主库IP',
  MASTER_USER = 'repl_user',
  MASTER_PASSWORD = 'password',
  MASTER_AUTO_POSITION = 1;    -- 启用 GTID 自动定位

-- 启动复制
START SLAVE;

验证同步状态

输入

SHOW SLAVE STATUS\G

查看以下状态:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Last_IO_Error:

Last_SQL_Error:

如均为yes并且无错误,即成功。

进行实操验证

通过在主库创建新数据库,在从库查看是否会出现新数据库。

1panel中要在数据库页面点击从服务器同步才能同步显示(实际上是有的,只是1panel没有显示)

3.总结

建议从新开始配置,即主从数据库均为空数据库,如果主数据库有内容,请手动备份,后期导入,不然可能会遇到某些奇怪的问题。

1panel是一个很好的面板工具,尽管容器在使用过程中需要额外操作,但瑕不掩瑜。如果在非容器中配置主从同步,只需将本文在mysql的配置文件添加的内容提取出来,放入mysql配置文件即可,其他操作正常。

*这是一则由 Google AdSense 自动推荐的广告,不代表本站立场
此作者没有提供个人介绍。
最后更新于 2025-04-01