AWS / mysql & mariaDB · 2023年12月16日 0

主从设置—-将RDS数据库做从库

RDS数据库做从库步骤

一、准备工作:

部署mysql

1、服务器上自建数据

2、RDS上启动数据库

二、开始配置mysql主从的源库

1、源库配置

vim /etc/my.cnf 或者 vi /etc/my.cnf

#增加以下配置

log-bin=mysql-bin server_id=101

#选择增加的参数

binlog-do-db= 数据库名 #需要同步的数据库
binlog-ignore-db = 数据库名 #不需要同步的数据库

完成之后,重启数据库:

systemctl resatrt mysqld

2、源机上创建用于复制的数据库账号,可以使用已经创建好的,也可以新建,需要注意的是mysql8及之后版本,需要先创建好数据库账号

#mysql -uxxx   -pxxx  进入数据库
#mysql8以下使用
mysql> grant replication slave on *.* to '数据库用户'@'%'identified by '123';
mysql> grant replication client on *.* to '数据库用户'@'%'identified by '123';
#mysql8及以上使用
mysql> grant replication client,replication slave on *.* to '数据库用户'@'%';
#刷新
mysql> flush privileges;

三、配置从库(RDS版本)

1、将源 MySQL 或 MariaDB 实例设置为只读。

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;

2、对源 MySQL 或 MariaDB 实例运行 SHOW MASTER STATUS 命令以确定二进制日志位置。

您将收到类似于以下示例的输出。

File                         Position  

------------------------------------------------------

 mysql-bin-changelog.000031      107  

-------------------------------------------------------

记住这两个值,从库配置需要。

3、使用 mysqldump 将数据库从外部实例(自建库)复制到 Amazon RDS 数据库实例。

mysqldump --databases database_name \

--single-transaction \
--compress \
--order-by-primary \
-u local_user \
-plocal_password | mysql \
--host=hostname \
--port=3306 \
-u RDS_user_name \
-pRDS_password

确保 -p 选项和输入的密码之间没有空格。

主机名(hostname)是 Amazon RDS 数据库实例端点中的域名服务 (DNS) 名称。

4、再次将源 MySQL 或 MariaDB 实例设置为可写。

mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

5、对于外部实例,向复制用户授予 REPLICATION CLIENT 和 REPLICATION SLAVE 权限。例如,要为您的域的“REPLICATION CLIENT”用户授予对所有数据库的 REPLICATION SLAVE 和 repl_user 权限,请发出以下命令。

GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';

6、将 Amazon RDS 数据库实例设置为副本。为此,请先以主用户身份连接到 Amazon RDS 数据库实例。    然后使用 mysql.rds_set_external_master 命令,将外部 MySQL 或 MariaDB 数据库标识为源实例。使用在步骤 2 中确定的主日志文件名和主日志位置。以下是示例。

CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 'Position', 0);

7、在 Amazon RDS 数据库实例上,发出 mysql.rds_start_replication 命令以启动复制。

CALL mysql.rds_start_replication;

四、注意事项:

1、修改安全组,将指定的源数据库服务器IP写入配置。

查看RDS实例的公网IP :nslookup ‘终端节点‘,

示例:nslookup meiyetong-slave.czyuflmj9wgf.rds.cn-northwest-1.amazonaws.com.cn

(RDS内网IP查看 :show variables like ‘%host%’;)

(RDS查看server_id:show variables like ‘server_id’;)

2、通过使用所选的客户端,连接到外部实例并创建要用于复制的用户。请仅将该账户用于复制,并将其限制为您的域以提高安全性。

—————————————————————————————————–

Amazon RDS数据库实例配置与外部源主从同步数据

准备工作

1、AWS RDS Mysql开启配置

binlog_format 参数设置为 MIXED

autocommit 参数设置为 1

2、保证RDS与外部库的网络互通(安全组,白名单等)

可以通过运行以下任一命令来查找 RDS 实例的 IP 地址

nslookup rds-endpoint

或者

dig rds-endpoint

配置主从同步

1、将源 MySQL设置为只读

mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;

2、 查看日志位置

SHOW MASTER STATUS;

示例输出

File                   Position
---------------------------------
mysql-bin.000001 155
----------------------------------

3、从库导入数据,mysqldump或者navicat等工具导入

mysqldump --databases database_name \

--single-transaction \
--compress \
--order-by-primary \
-u local_user \
-plocal_password | mysql \
--host=hostname \
--port=3306 \
-u RDS_user_name \
-pRDS_password

确保 -p 选项和输入的密码之间没有空格

4、将源 MySQL设置为可写

mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

5、配置用于同步的账号

MySQL 5.7

CREATE USER 'sync_user'@'RDS IP' IDENTIFIED BY 'password';

MySQL 8.0

CREATE USER 'sync_user'@'RDS IP' IDENTIFIED WITH mysql_native_password BY 'password';

6、同步用户授予 REPLICATION CLIENT 和 REPLICATION SLAVE 权限

MySQL 5.7

GRANT REPLICATION CLIENT, REPLICATION SLAVE ON . TO 'sync_user'@'RDS IP' IDENTIFIED BY 'password';

MySQL 8.0

GRANT REPLICATION CLIENT, REPLICATION SLAVE ON . TO 'sync_user'@'RDS IP';

Demo实例

7、将 AWS RDS 数据库实例设置为副本。

请先以主用户身份连接到 Amazon RDS 数据库实例。然后使用 mysql.rds_set_external_source 命令,将外部 MySQL数据库标识为源实例。

CALL mysql.rds_set_external_source ('主库Host', 3306, 'sync_user', 'password', 'mysql-bin.000001', 155, 0);

Demo实例

CALLmysql.rds_set_external_master ('52.83.161.83', 3306, 'blg', 'Blg?2020','mysql-bin.000010', '2950', 0);

8、AWS RDS实例上启动同步

CALL mysql.rds_start_replication;

查看同步状态

SHOW REPLICA STATUS\G;

查看同步状态

同步状态,重点关注指标:

其他会用到的一些命令

停止复制过程

CALL mysql.rds_stop_replication;

清除只读副本

CALL mysql.rds_reset_external_source;

清除只读副本

CALL mysql.rds_reset_external_master;

备注

分配给 RDS 数据库实例的 IP 地址在以下一种或多种情况下会发生变化:

1.实例已停止并重新启动。

注意:重启实例时,IP 地址不会发生变化。

2.由于实例故障和数据库实例类更新等情况,底层主机被替换。

3.实例上进行了硬件维护。

4.实例位于多可用区环境中,并且发生了故障转移。

5.数据库实例的操作系统进行软件修补。

6.数据库实例的手动故障转移由使用带故障转移的重启操作启动。

7.数据库引擎进行主要或次要版本升级。

8.实例的可用区中断。

如果想避免RDS实例IP变动而造成同步中断,可以把外部库实例放在同一VPC下通过内网互通

本章结束~ifan