概述
本文主要讲解阿里云RDS数据库的从库搭建,虽然RDS数据库自带一个备库,但是自己手里没有,总觉得不安全。
搭建过程
1. 所需环境
①一个固定IP的LINUX服务器(windows没试过),无论直接连接主库,还是通过mysql proxy代理连接主库都需要一台固定IP的服务器。
②找到和RDS数据库版本一致的安装包,我的RDS数据库版本是5.6.16,所以要下载mysql5.6.16版本(这里被坑的好惨,之前从库选的是5.6.38,配置了好久都没问题,结果突然有一天报错了),不知道mysql版本的可以用“mysql> select version(); ”命令查看,mysql老版本下载地址“https://downloads.mysql.com/archives/community/”。
2. 服务器上搭建mysql,恢复数据
①检查mysql是否安装,如果已安装,先删掉
卸载方法请参考http://www.jb51.net/article/97516.htm
②解压下载的mysql的RPM包
# tar -xvf MySQL-5.6.16-1.el6.x86_64.rpm-bundle.tar -C mysql5.6.16
# cd mysql5.6.16/
只安装一下三个包就够了
# rpm -ivh MySQL-server-5.6.16-1.el6.x86_64.rpm
# rpm -ivh MySQL-devel-5.6.16-1.el6.x86_64.rpm
# rpm -ivh MySQL-client-5.6.16-1.el6.x86_64.rpm
修改配置文件位置
# cp /usr/share/mysql/my-default.cnf /etc/my.cnf
③登录阿里云下载RDS数据库备份数据下载最新的数据
RDS备份文件下载完毕后,我们需要对其进行解压。按照阿里云官方文档,我们需要下载阿里云专门的脚本进行解压,而且必须是在linux OS 64bit上使用。
④下载RDS解压脚本,使用如下命令:“wget http://oss.aliyuncs.com/aliyunecs/rds_backup_extract.sh”
将下载好的RDS数据库备份文件上传到服务器,上传到解压脚本相同的目录
给解压工具赋执行权限
# chmod 777 rds_backup_extract.sh
使用RDS解压脚本,解压RDS备份文件
# ./rds_backup_extract.sh -f /root/hins2350595_data_20171122205138.tar.gz -C /home/mysql/data/
因为是用root用户操作的所以要给目录赋权限
chown mysql:mysql -R /home/mysql/data/
⑤修改my.cnf配置文件
[mysqld]
datadir = /home/mysql/data/ #备份解压的路径
port = 3306
server_id = 240 #一般是ip地址的最后的几个数字
socket = /home/mysql/data/mysqld.sock
max_allowed_packet=32M
log-error = /home/mysql/data/error.log
default-storage-engine=INNODB
log-bin=mysql-bin
master-info-repository=file
relay-log-info_repository=file
binlog-format=ROW
gtid-mode=on
enforce_gtid_consistency = 1
log_slave_updates = 1
#0,区分大小写; 1,不区分
lower_case_table_names=1
character_set_server = utf8 #这个字符集一定要与RDS数据库一致
innodb_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:200M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=1048576000
修改完毕后启动mysql
# service mysql start
3. 主从配置
进入数据库
# mysql -h127.0.0.1 –uroot -p
不用输密码直接回车进入
然后我们再来创建root用户密码,并赋予其连接权限。如下:
use mysql;
update user set password=password('123456') where user='root';
update user set host='%' where user='root' && host='127.0.0.1';
flush privileges;
然后用Navicat测试一下远程连接,没有问题后进行下一步
重新登录数据库
# mysql -h127.0.0.1 -uroot -p123456
重置本地MySQL的复制关系
mysql> reset slave;
可能会报一下错误
解决方法如下
①删除5张表
use mysql
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats;
②重新导入脚本
# source /usr/share/mysql/mysql_system_tables.sql
然后重启数据库
mysql> reset slave;
Query OK, 0 rows affected (0.01 sec)
mysql> set global gtid_purged="69231693-651b-11e6-a629-000c29b2535c:1-16";
注:打开备份解压文件可以看到文件xtrabackup_slave_info,其中第一行就是这里要执行的
Query OK, 0 rows affected (0.02 sec)
完成后执行一下操作
mysql> change master to
-> master_host='RDS数据库地址',
-> master_user='数据库用户名',
-> master_password='密码',
-> master_auto_position=1;
注:打开备份解压文件可以看到文件xtrabackup_slave_info,其中第二行就是这里要执行的
Query OK, 0 rows affected, 2 warnings (0.04 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)
执行mysql> show slave status \G 查看结果
看到两个Yes就代表你成功了
特别说明
网上有好多资料是下面这种配置
mysql> change master to
-> master_host='RDS数据库地址',
-> master_user='数据库用户名',
-> master_password='密码',
-> master_log_file='mysql-bin.000953',
-> master_log_pos=437219;
这种方式比较适合自己搭建的主从数据库,不太适合阿里云RDS数据库的主从搭建,效果其实和上面配置中的
mysql> set global gtid_purged="69231693-651b-11e6-a629-000c29b2535c:1-16";
master_auto_position=1;
是一样的。
还有,阿里云提供的备份也不是绝对正确的,如果恢复了报错,重新选择一个日期的备份恢复。
好了,以上就是阿里云RDS数据库从库搭建的全部内容。
此文转载。