replicate_rewrite_db 作为 MariaDB 中的系统变量
MariaDB 10.11.0,我们的最新预览版,包含了相当多的改进。我们这里要讨论的是 replicate-rewrite-db
。基于 MDEV-15530,此选项从 10.11.0 版本开始成为一个系统变量。在此版本之前,它只是 mariadbd
和 mariadb-binlog
二进制文件使用的一个选项。此选项的行为没有改变;它只是变成了一个动态变量。
如何试用此功能
最快的方法是在 docker / podman 中试用 MariaDB 10.11(参考博客 mariadb-replication-using-containers),使用以下命令:
要启动一个主库 10.11.0 MariaDB 容器,请克隆目录,导航到克隆的目录并运行以下命令:
docker run -d --rm --name mariadb-primary \
-v $PWD/config-files/primarycnf:/etc/mysql/conf.d:z \
-v $PWD/primaryinit:/docker-entrypoint-initdb.d:z \
-v $PWD/log-files-primary:/var/lib/mysql \
-e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=True \
quay.io/mariadb-foundation/mariadb-devel:10.11
要启动副本/从库,请运行命令启动 mariadbd
进程,并在命令行上指定 replicate-rewrite-db
选项:
docker run -d --rm --name mariadb-secondary-1 \
-v $PWD/config-files/secondary-1:/etc/mysql/conf.d:z \
-v $PWD/secondaryinit:/docker-entrypoint-initdb.d:z \
-v $PWD/log-files-secondary-1:/var/lib/mysql \
-e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=True \
quay.io/mariadb-foundation/mariadb-devel:10.11 --replicate-rewrite-db='db1->db2'
除了将该选项指定为命令行参数外,您还可以使用配置文件。有关参考信息,请参阅之前关于使用插件的文章。
您可以在从库端检查系统变量:
$ docker exec mariadb-secondary-1 mariadb -uroot -e "show global variables like 'replicate_rewrite%'";
+----------------------+----------+
| Variable_name | Value |
+----------------------+----------+
| replicate_rewrite_db | db1->db2 |
+----------------------+----------+
相同的信息可以通过 show replica status
获取:
$ docker exec mariadb-secondary-1 mariadb -uroot -e "show replica status \G"|grep Replicate_Rewrite
Replicate_Rewrite_DB: db1->db2
要动态更改变量,请连接到从库,停止复制线程并设置变量。此外,您可以添加一对数据库列表。
STOP REPLICA;
SET @@GLOBAL.replicate_rewrite_db="db1->db1_repl, db2->db2_repl";
START REPLICA;
select @@global.replicate_rewrite_db;
+-------------------------------+
| @@global.replicate_rewrite_db |
+-------------------------------+
| db1->db1_repl,db2->db2_repl |
+-------------------------------+
现在,为了验证更改,请在从库上创建数据库 db1_repl
,并在主库上执行表创建。您可以在从库上检查效果:
# On secondary
docker exec mariadb-secondary-1 mariadb -uroot -e "create database db1_repl;";
# On primary
docker exec mariadb-primary mariadb -uroot -e "create or replace database db1; use db1; create table tp(t int); insert into tp values(1),(2);";
# On secondary
docker exec mariadb-secondary-1 mariadb -uroot -e "use db1_repl; show tables;";
+--------------------+
| Tables_in_db1_repl |
+--------------------+
| tp |
+--------------------+
如果您正在运行 podman,只需将 docker
替换为 podman
。
或者,您可以直接从 mariadb.org/download 下载二进制文件: