在MariaDB中复制并重命名数据库的方法

在MariaDB中复制并重命名数据库的方法

💡 原文英文,约3300词,阅读约需12分钟。
📝

内容提要

MySQL/MariaDB的复制过滤器是一个重要的功能,可以只复制特定的数据库或表。本文介绍了在主服务器上将一个数据库复制到具有不同名称的副本服务器的用例,并提供了相应的配置步骤。测试发现,MariaDB 10.5版本中的CHANGE REPLICATION FILTER命令不起作用,需要使用SET GLOBAL命令来动态设置复制过滤器。此外,还介绍了在MariaDB 10.11版本中可以动态设置复制重写数据库参数的方法。在MariaDB的早期版本中,配置数据库重写功能需要修改配置文件并重启服务。

🔎

延伸解读

版本差异:动态设置复制重写数据库

文章测试表明,MariaDB 10.5 中无法使用 CHANGE REPLICATION FILTER 命令设置 REPLICATE_REWRITE_DB,且 SET GLOBAL 动态设置 replicate_rewrite_db 变量会报错,因为该变量不存在。直到 MariaDB 10.11,才支持动态设置 replicate_rewrite_db,并可在全局变量和 SHOW SLAVE STATUS 中看到。因此,若使用 10.11 之前的版本,必须通过修改配置文件并重启服务来配置数据库重写,这会影响服务可用

复制过滤规则在副本本地生效

文章强调,--replicate-* 过滤规则是在副本实例本地应用的,主服务器的规则不会影响副本。在示例中,副本上最初错误地设置了 replicate_do_db=db_primary,导致主库的更新未被复制到 db_replica。因为 SQL 线程会查找 replicate_do_db 指定的数据库名(此处应为 db_replica)来限制复制。将 replicate_do_db 改为 db_replica 后,复制恢复正常。这提醒我们,配置过滤规则时需以副本上的实际数据库名为准。

使用 mysqldump 导出时的注意事项

文章提到,在将主库的 db_primary 复制到副本的 db_replica 时,使用 mysqldump 导出数据库不应使用 --create-db 选项。示例中使用了 --no-create-db,以便将数据导入到已存在的 db_replica 数据库中。如果使用了 --create-db,导出的 SQL 会包含创建原数据库名的语句,可能导致导入时创建错误的数据库或与重写规则冲突。因此,在重命名数据库的复制场景中,应避免使用 --create-db。

❓

Q&A

如何在MariaDB中复制数据库并重命名?

可以通过在主服务器上使用mysqldump导出数据库,然后在副本服务器上导入到不同名称的数据库来实现。

MariaDB 10.5版本中如何设置复制过滤器?

在MariaDB 10.5中,无法使用CHANGE REPLICATION FILTER命令,需要使用SET GLOBAL命令来动态设置复制过滤器。

在MariaDB 10.11中如何动态设置复制重写数据库参数?

在MariaDB 10.11中,可以直接使用SET GLOBAL命令动态设置replicate_rewrite_db参数,无需重启服务。

在早期版本的MariaDB中如何配置数据库重写功能?

在早期版本中,需要修改配置文件并重启MariaDB服务来配置数据库重写功能。

复制过滤器的规则在副本实例上如何应用?

复制过滤器规则是在副本实例上本地应用的,主服务器的规则不会影响副本。

使用mysqldump导出数据库时需要注意什么?

使用mysqldump导出数据库时,不应使用create-db命令,以避免在导入时出现问题。

🏷️

标签

➡️

继续阅读