阿里云RDS与ECS服务器数据库做主从

1447 篇文章 12 订阅
1447 篇文章 7 订阅

一、阿里云RDS介绍

介绍:[阿里云](https://l.gushuji.site/aliyun)RDS(数据库)基于飞天大规模分布式计算和存储能力,提供超高性价比的单机版实例,同时利用读写分离横向扩展读能力,满足网站类的业务需求。提供稳定、高性能、安全可靠的数据库服务,针对电商秒杀场景进行专项优化,解决热点数据的高并发更新性能瓶颈,100倍性能提升。通过高安全模式,内置SQL注入检测模块,实时拦截风险SQL,保护数据安全。数据强一致性保证,满足金融级可靠性要求,搭建事前、事中、事后三层数据安全防护网,提供双机热备、同城、异地三中心部署架构,充分满足金融级合规可靠性要求。高稳定性,随时闪回任意时间点,对计算资源的弹性伸缩能力,赋予您更高的生产力,分钟级部署游戏分区数据库;主备双节点架构搭配高安全链路,实现全自动无感知容灾切换,业务稳定性先人一步。连接大数据存储、计算和可视化引擎,MySQL作为在线关系型数据存储服务,搭配E-MapReduce、HybridDB、DataV等,可满足如日志分析、数据仓库、商业智能、机器学习、科学模拟等业务。

image_1bfbv4lm31odl1vc11dvj24m1pof9.png-89.7kB

提示: 虽然阿里云介绍的不错,但是这价格也确实是不便宜。但是针对于中小公司,RDS还是比较经济实惠、稳定的。


二、阿里云RDS与ECS服务器搭建主从

1.购买服务器

本人属于贫穷系列,但是!! 为了试验。我买了2个小时的RDS 
12.png-84.6kB

关于RDS硬件根据你的需求进行设置 
13.png-47.6kB

2.创建数据库和用户 
14.png-44.4kB 
9w.png-54.6kB 
我们创建的数据库用户创建了2个

abcdocker 用于程序目录 
mmm 用户mysql主从连接用户 
提示: 我们abcdocker用于程序目录,需要读写权限,mmm作为主从连接用户授权只读即可

99.png-55.5kB

3.设置白名单和开通外网IP 
image_1bfc0hev71lt1dbd2oub6e15si3v.png-79.2kB 
设置白名单,因为我使用的是美国的一台vps所以需要设置白名单。不管哪的IP我们都需要设置白名单,数据库的连接尽量使用内网访问,增加安全性。 
image_1bfc0ipf55anbtic2r1dho1rub4c.png-44.1kB

因为我的服务器和ECS不在一个网段,所以我需要开通公网IP 
开通后 
image_1bfc0mv011e1e2id1be11e1h1emq4p.png-30.3kB

4.登陆数据库 
image_1bfc0d08ble81ngi1de21a7113os35.png-93.8kB 
因为我们只有abcdocker有读写权限,我们用abcdocker用户创建表 
image_1bfc0el2n1jmc1dp41gir1nf913033i.png-36.7kB

我们创建一个表 
image_1bfc0r2kam2keecmg1v2c118f56.png-58.9kB 
语法如下:

CREATE TABLE table1(id int AUTO_INCREMENT  NOT null  PRIMARY KEY  ,                   name VARCHAR (20),                   age int,                   class VARCHAR (20),                   create_date DATETIME )
  • 1
  • 2
  • 3
  • 4
  • 5

5.ECS数据库设置 
环境

系统版本[root@abcdocker ~]# cat /etc/redhat-release  CentOS release 6.8 (Final) 数据库版本[root@abcdocker ~]# mysql -Vmysql  Ver 14.14 Distrib 5.6.35, for Linux (x86_64) using  EditLine wrapper  MySQL配置文件[root@abcdocker ~]# grep '^[a-z]' /etc/my.cnfserver_id=211read_only   = 1port = 3307replicate-wild-ignore-table     = mysql.%replicate-wild-ignore-table     = test.%binlog_format   = ROWlog-bin                  = mysql-binlog-bin-index            = mysql-bin.indexrelay-log                = relay-logrelay_log_index          = relay-log.index
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

GTID配置

gtid_mode=onenforce_gtid_consistency=onlog-slave-updates = 1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
  • 1

  • 2

  • 3

  • 4

  • 5

    参考:MySQL GTID是在传统的mysql主从复制的基础之上演化而来的产物,即通过UUID加上事务ID的方式来确保每一个事物的唯一性。这样的操作方式使得我们不再需要关心所谓的logfile和logPos,只是简单的告诉从库,从哪个服务器上去找主库就OK了。简化了主从的搭建以及failover的过程,同时比传统的复制更加安全可靠。由于GTID是连续没有空洞的,因此主从库出现数据冲突时,可以通过注入空事物的方式进行跳过。本文主要讲述GTID主从架构的错误处理方式

使用GIID做主从可以执行一下参数,不需要设置binlog

change master to MASTER_HOST='rm-2ze5i3w4h0182kua0o.mysql.rds.aliyuncs.com',master_user='mmm',master_password='Abcdocker!',master_port=3306,master_auto_position=1;
  • 1
  • 2
  • 3
  • 4
  • 5

使用binlog进行记录

[root@abcdocker ~]# mysql -ummm -p -hrm-2ze5i3w4h0182kua0o.mysql.rds.aliyuncs.com#我们需要远程连接到主库,执行show master statusmysql> show master status;+------------------+----------+--------------+------------------+---------------------------------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                           |+------------------+----------+--------------+------------------+---------------------------------------------+| mysql-bin.000004 |  4273212 |              |                  | 29fe5004-315c-11e7-9a0f-6c92bf477043:1-7365 |+------------------+----------+--------------+------------------+---------------------------------------------+1 row in set (0.16 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

执行命令

CHANGE MASTER TO MASTER_HOST='rm-2ze5i3w4h0182kua0o.mysql.rds.aliyuncs.com',  #这是主库的IP(域名也可以需要做解析)MASTER_PORT=3306,              #主库的端口,从库端口和主库不可以相同MASTER_USER='mmm',            #这是主库上创建用来复制的用户repMASTER_PASSWORD='Abcdocker!'    #rep的密码MASTER_LOG_FILE='mysql-bin.000025', #这里是show master status时看到的查询二进制日志文件名称,这里不能多空格MASTER_LOG_POS=9155;       #这里是show master status时看到的二进制日志偏移量,不能多空格
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用binglog记录或者使用GIID记录都可以,关于mysql主从可以参考 
MySQL主从复制原理、半同步操作步骤及原理

开启从库

mysql> start slave;Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 1
  • 2

查看从库状态,我们需要看到两个yes

mysql> show slave status\G*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: rm-2ze5i3w4h0182kua0o.mysql.rds.aliyuncs.com                  Master_User: mmm                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000004          Read_Master_Log_Pos: 4276127               Relay_Log_File: relay-log.000006                Relay_Log_Pos: 33642        Relay_Master_Log_File: mysql-bin.000004             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:           Replicate_Ignore_DB:            Replicate_Do_Table:        Replicate_Ignore_Table:       Replicate_Wild_Do_Table:   Replicate_Wild_Ignore_Table: mysql.%,test.%                   Last_Errno: 0                   Last_Error:                  Skip_Counter: 0          Exec_Master_Log_Pos: 4276127              Relay_Log_Space: 33809              Until_Condition: None               Until_Log_File:                 Until_Log_Pos: 0           Master_SSL_Allowed: No           Master_SSL_CA_File:            Master_SSL_CA_Path:               Master_SSL_Cert:             Master_SSL_Cipher:                Master_SSL_Key:         Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No                Last_IO_Errno: 0                Last_IO_Error:                Last_SQL_Errno: 0               Last_SQL_Error:   Replicate_Ignore_Server_Ids:              Master_Server_Id: 3482796583                  Master_UUID: 29fe5004-315c-11e7-9a0f-6c92bf477043             Master_Info_File: /usr/local/mysql/data/master.info                    SQL_Delay: 0          SQL_Remaining_Delay: NULL      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it           Master_Retry_Count: 86400                  Master_Bind:       Last_IO_Error_Timestamp:      Last_SQL_Error_Timestamp:                Master_SSL_Crl:            Master_SSL_Crlpath:            Retrieved_Gtid_Set: 29fe5004-315c-11e7-9a0f-6c92bf477043:1-7376            Executed_Gtid_Set: 29fe5004-315c-11e7-9a0f-6c92bf477043:1-7376                Auto_Position: 11 row in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

查看是否开启成功

mysql> use abc;show tables;desc table1;Database changed+---------------+| Tables_in_abc |+---------------+| table1        |+---------------+1 row in set (0.00 sec) +-------------+-------------+------+-----+---------+----------------+| Field       | Type        | Null | Key | Default | Extra          |+-------------+-------------+------+-----+---------+----------------+| id          | int(11)     | NO   | PRI | NULL    | auto_increment || name        | varchar(20) | YES  |     | NULL    |                || age         | int(11)     | YES  |     | NULL    |                || class       | varchar(20) | YES  |     | NULL    |                || create_date | datetime    | YES  |     | NULL    |                |+-------------+-------------+------+-----+---------+----------------+5 rows in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

三、总结

使用阿里云RDS和云服务器ECS做主从会出现主从数据不能及时同步,如果直接将ECS当从库会出现数据不一致的情况,在阿里云RDS与ECS主从环境,ECS服务器不适合用来当从库,只适合用于备份!

由于阿里云RDS成本过高,可以考虑在ECS服务器上搭建mysql集群,但是安全性可能没RDS高。因为是自建库,可能会出现的问题比较多

出处:https://blog.csdn.net/abcdocker/article/details/71249809

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值