阿里云ECS服务器自建Mysql与RDS进行主从复制实现方法

准备工作

1、RDS数据库服务器(不会操作,就去阿里提工单,他们就教你)
2、ECS自建数据库(至于建立数据库的过程,上篇文章有写,请注意,rds上的数据库版本要与ecs上的版本相同,一点都不能不一样!)
可以在rds上输入用户名和密码登录进数据库中,打开SQL窗口,执行"select version();"来查看具体版本号
3、Mysql主从复制的原理

在这里插入图片描述

主从复制原理

1、从库会生成两个线程,一个I/O线程,一个SQL线程;
2、I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
3、主库会生成一个log dump线程,用来给从库I/O线程传binlog;
4、SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;

将RDS上面的数据导到ECS自建数据库中

1、点击RDS管理页面的"迁移数据库" --> 点击左侧列表"数据传输"列表中的"数据迁移" --> 选择你的实例所在地区
–> “创建迁移任务” --> 弹出来的页面都是自己手动填写的,一般迁移过程中建议将应用关闭,因为数据还会更新,不过阿里说
迁移过程中,DDL的指定都无效,也不知道真假的,反正我迁的时候就给关了
2、登录到rds上,点击"新建数据库用户" --> 指定用户名和密码 --> 赋予"SELECT,REPLICATION
SLAVE,REPLICATION CLIENT"权限
3、当它预检查成功的时候就证明,你的迁移可以开始了,选中你的任务,点击下方的"启动",然后等待!
4、迁移完毕后,在从库上登录查看一下迁移的库是否存在

在ECS自建数据库上操作

1、更改/etc/my.cnf文件

[mysqld]
user=mysql                                             #用来启动mysql的用户
server_id = 2                                          #指定从库的server_id,不能与主库相同
read_only = 1                                          #设置从库为只读
port = 3307                                            #指定端口号为3307,最好不要跟主库相同
replicate-wild-ignore-table     = mysql.%              #主从复制的时候忽略
replicate-wild-ignore-table     = test.%               #主从复制的时候忽略
binlog_format   = ROW                                  #binlog的格式,ROW格式记录方式成每一行数据被修改,
                                                       然后在slave端再对相同的数据进行修改
log-bin                  = mysql-bin                   #二进制日志,记录对数据发生变化的sql语句,以二进制方式
                                                       保存在磁盘中
log-bin-index            = mysql-bin.index             #指定索引文件,此文件指示当前使用了哪个日志文件
relay-log                = relay-log                   #中继日志,用来存放master的bin中的内容,看上方原理
relay_log_index          = relay-log.index             #指定索引文件,此文件指示当前使用哪个日志文件

gtid_mode=on                                           #开启GTID


enforce_gtid_consistency=on                          #只记录对基于GTID的复制安全
log-slave-updates = 1                                #允许下端接入slave

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  #存储引擎采用严格模式


basedir=/app/mysql/                                  #指定mysql的安装目录
datadir=/app/mysql/data                              #指定mysql数据的存放目录
socket=/tmp/mysql.sock                               #指定mysql的sock文件存放目录
key_buffer_size=32M                                  #myisam索引缓冲,对myisam很重要,缓存myisam表索引数据
max_allowed_packet=8M                                #限制Server接受的数据包大小

[mysqldump]                                          #数据库备份
quick                                                #强制mysqldump从服务器一次一行地检索表中的行而不是
                                                     检索所有行并在输出前将它缓存到内存中

GTID概述

1、全局事物标识:global transaction identifieds。
2、GTID事物是全局唯一性的,且一个事务对应一个GTID
3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致
4、GTID用来代替classic的复制方法,不在使用binlog+pos开启复制。而是使用master_auto_postion=1的方式自动匹配GTID断点进行复制
5、MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。
6、在传统的slave端,binlog是不用开启的,但是在GTID中,slave端的binlog是必须开启的,目的是记录执行过的GTID(强制)

2、启动数据库

[root@localhost ~]# service start mysqld             #Centos6上面的启动命令(前提是要将mysql.server文
                                                     件加到系统服务)

3、登录rds数据库查看信息

可视化操作,但是也能打开SQL窗口,打开SQL窗口执行以下sql

show master status; #记录执行结果;

4、登录从数据库执行以下语句

mysql>change master to MASTER_HOST='RDS内网地址',
                       MASTER_USER='slave',
                       MASTER_PASSWORD='slave用户的密码',
                       MASTER_LOG_FILE='在rds上show master status的File列内容',
                       MASTER_LOG_POS=1;
mysql> start slave;
mysql> show slave status;(以下这两个参数显示YES则证明成功)
Slave_IO_Running:YES
Slave_SQL_Running:YES                                
发布了377 篇原创文章 · 获赞 50 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/guo_qiangqiang/article/details/104990869