如何在同一服务器分离MariaDB Galera集群与独立数据库?
分离MariaDB Galera集群数据库与独立数据库的方案
针对你的需求,有两种可行方案,优先推荐运行独立实例的方式,因为配置过滤的方法存在明显局限性:
方案一:通过Galera配置过滤指定数据库(不推荐)
Galera提供了wsrep_ignore_db参数,可以指定不需要同步的数据库名称,但这种方式存在诸多限制:
- 仅能阻止**DML操作(增删改)**的同步,**DDL操作(建表、改结构)**仍会同步到集群其他节点
- 若集群其他节点误操作该数据库,仍可能导致数据不一致
- 版本兼容性存在不确定性,后续升级可能出现问题
如果要尝试这种方式,在该节点的/etc/mysql/mariadb.conf.d/50-server.cnf中添加:
wsrep_ignore_db = wordpress_db
替换wordpress_db为你的WordPress专属数据库名,然后重启MariaDB服务:sudo systemctl restart mariadb
但再次强调,这种方法仅适合临时测试场景,生产环境不建议使用。
方案二:运行第二个独立的MariaDB实例(推荐)
这种方式彻底隔离两个数据库环境,完全避免集群同步影响,步骤如下(针对Ubuntu 20.04/22.04 + MariaDB 10.6):
1. 准备实例资源
- 复制原配置文件作为新实例的基础配置:
sudo cp /etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/mariadb.conf.d/50-server2.cnf - 编辑新配置文件
/etc/mysql/mariadb.conf.d/50-server2.cnf,修改以下关键参数(避免与集群实例冲突):[mysqld] port = 3307 # 与集群实例的3306端口区分 socket = /run/mysqld/mysqld2.sock datadir = /var/lib/mysql2 pid-file = /run/mysqld/mysqld2.pid log_error = /var/log/mysql/error2.log - 创建新的数据目录并设置权限:
sudo mkdir /var/lib/mysql2 sudo chown mysql:mysql /var/lib/mysql2
2. 初始化新实例
执行初始化命令,生成空的数据库环境:
sudo mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql2
--initialize-insecure表示不生成临时root密码,后续自行设置。
3. 创建systemd服务文件
- 复制原服务文件并修改:
sudo cp /lib/systemd/system/mariadb.service /lib/systemd/system/mariadb2.service - 编辑
/lib/systemd/system/mariadb2.service,修改以下内容:ExecStart=/usr/sbin/mysqld --defaults-file=/etc/mysql/mariadb.conf.d/50-server2.cnf $MYSQLD_OPTS PIDFile=/run/mysqld/mysqld2.pid - 重新加载systemd配置:
sudo systemctl daemon-reload
4. 启动并配置独立实例
- 启动新服务并设置开机自启:
sudo systemctl start mariadb2 sudo systemctl enable mariadb2 - 登录新实例(通过socket连接):
mysql -u root -S /run/mysqld/mysqld2.sock - 在新实例中设置root密码、创建WordPress专属数据库和用户:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('your_secure_password'); CREATE DATABASE wp_standalone; CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'wp_user_password'; GRANT ALL PRIVILEGES ON wp_standalone.* TO 'wp_user'@'localhost'; FLUSH PRIVILEGES;
5. 配置WordPress连接独立实例
修改WordPress的wp-config.php文件,更新数据库连接参数:
define('DB_HOST', 'localhost:/run/mysqld/mysqld2.sock'); // 或者用127.0.0.1:3307 define('DB_NAME', 'wp_standalone'); define('DB_USER', 'wp_user'); define('DB_PASSWORD', 'wp_user_password');
注意事项
- 两个实例的日志、临时文件路径都要分开,避免互相干扰
- 独立实例不在Galera集群同步范围内,需单独配置备份策略(如定时mysqldump)
- 监控服务器CPU、内存资源使用,避免两个实例竞争资源导致性能问题
内容的提问来源于stack exchange,提问作者Vakarelov
相关产品推荐
相关产品推荐

