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

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

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

mysql

一、阿里云RDS介绍

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

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


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

1.购买服务器

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

关于RDS硬件根据你的需求进行设置

2.创建数据库和用户

我们创建的数据库用户创建了2个

abcdocker 用于程序目录

mmm 用户mysql主从连接用户

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

3.设置白名单和开通外网IP

设置白名单,因为我使用的是美国的一台vps所以需要设置白名单。不管哪的IP我们都需要设置白名单,数据库的连接尽量使用内网访问,增加安全性。

因为我的服务器和ECS不在一个网段,所以我需要开通公网IP

开通后

4.登陆数据库

因为我们只有abcdocker有读写权限,我们用abcdocker用户创建表

我们创建一个表

语法如下:

CREATE TABLE table1(id int AUTO_INCREMENT  NOT null  PRIMARY KEY  ,
name VARCHAR (20),
age int,
class VARCHAR (20),
create_date DATETIME )

5.ECS数据库设置

环境

系统版本
[root@abcdocker ~]# cat /etc/redhat-release
CentOS release 6.8 (Final) 数据库版本
[root@abcdocker ~]# mysql -V
mysql Ver 14.14 Distrib 5.6.35, for Linux (x86_64) using EditLine wrapper MySQL配置文件
[root@abcdocker ~]# grep '^[a-z]' /etc/my.cnf
server_id=211
read_only = 1
port = 3307
replicate-wild-ignore-table = mysql.%
replicate-wild-ignore-table = test.%
binlog_format = ROW
log-bin = mysql-bin
log-bin-index = mysql-bin.index
relay-log = relay-log
relay_log_index = relay-log.index

#GTID配置

gtid_mode=on
enforce_gtid_consistency=on
log-slave-updates = 1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
参考:MySQL GTID是在传统的mysql主从复制的基础之上演化而来的产物,即通过UUID加上事务ID的方式来确保每一个事物的唯一性。这样的操作方式使得我们不再需要关心所谓的log_file和log_Pos,只是简单的告诉从库,从哪个服务器上去找主库就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;

使用binlog进行记录

[root@abcdocker ~]# mysql -ummm -p -hrm-2ze5i3w4h0182kua0o.mysql.rds.aliyuncs.com
#我们需要远程连接到主库,执行show master status
mysql> 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)

执行命令

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

使用binglog记录或者使用GIID记录都可以,关于mysql主从可以参考

MySQL主从复制原理、半同步操作步骤及原理

开启从库

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

查看从库状态,我们需要看到两个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: 0
Master_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: 1
1 row in set (0.00 sec)

查看是否开启成功

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)

三、总结

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

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

阿里云RDS与ECS服务器数据库做主从的更多相关文章

  1. 阿里云RDS实例内不同数据库之间的数据迁移

    适用场景 本文适用于使用DTS实现相同实例下库名不同的数据库之间的数据迁移.本文以使用DTS将同一RDS实例下的amptest库迁移到jiangliu_amptest库为例来说明如何使用DTS实现相同 ...

  2. 使用阿里云RDS for SQL Server性能洞察优化数据库负载-初识性能洞察

    简介 数据库性能调优通常需要较高数据库水平,并伴随较多的前期准备工作,比如收集各种性能基线.不同种类的性能指标.慢SQL日志等,这通常费时费力且效果一般,当面对多个数据库时总体拥有成本会大幅增加.今天 ...

  3. 【故障公告】阿里云 RDS 数据库服务器 CPU 100% 造成全站故障

    非常非常抱歉,今晚 19:34 ~ 21:16 园子所使用的阿里云 RDS 数据库服务器突然出现 CPU 100% 问题,造成全站无法正常访问,由此您带来了很大的麻烦,请您谅解. 故障经过是这样的.1 ...

  4. 阿里云RDS数据库改造迁移方案

    1. 改造原因 (1) 由于历史原因, 本应该是同一个库的表分布在两个数据库中,需要对这两个库进行合并. (2) 已有的数据库性能无法满足业务的增长需要, 查询卡,慢问题突出. (3) 当前自建Mys ...

  5. 阿里云 RDS 数据库又发 CPU 近 100% 的“芯脏病”

    最近云界发生了2件事,一件是大事,一件是小事,大事是阿里云与微软合作推出了开放应用模型 Open Application Model(OAM),小事是由于微软 SQL Server 在阿里云上水土不服 ...

  6. 云计算之路-阿里云上:数据库连接数过万的真相,从阿里云RDS到微软.NET Core

    在昨天的博文中,我们坚持认为数据库连接数过万是阿里云RDS的问题,但后来阿里云提供了当时的数据库连接情况,让我们动摇了自己的想法. 帐户 连接数 A 4077 B 3995 C 741 D 698 E ...

  7. 云上的芯脏病:奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题

    最近遇到了奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题,遇到了3次. 第一次是10月12日(周六)凌晨 3:24 负载极低的时候开始出现,早上发现后进行了主备切换,恢复了正常. 第二次 ...

  8. 本地库还原至阿里云RDS服务器

    在此也感谢阿里云售后兄弟的支持.全文参考 https://help.aliyun.com/document_detail/95738.html? 1. 首先得要有个阿里云账号,已经购买RDS数据库(本 ...

  9. 阿里云RDS数据库备份同步到自建库方法(SHELL脚本)

    一.背景: 由于阿里云RDS生产库每天都需要备份且拷贝到自建读库,而如果使用阿里云的自动拷贝到只读实例, 费用太高, 故采用自编写同步脚本方法实现. 二.前提: 1). 已开通阿里云RDS, 且开启定 ...

随机推荐

  1. C++——多维数组动态开辟与释放

    前言 在讨论多维数组动态开辟与释放之前,先说说什么是二维数组静态开辟与释放. 形如这种就是静态开辟内存,事先画好了内存大小 #include<iostream> using namespa ...

  2. 每日一题-——LeetCode(78)子集

    给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集).输入: nums = [1,2,3]输出:[ [3],  [1],  [2],  [1,2,3],  [1,3],  [2, ...

  3. linux网络编程之socket编程(十二)

    今天继续学习socket编程,期待的APEC会议终于在京召开了,听说昨晚鸟巢那灯火通明,遍地礼花,有点08年奥运会的架势,有种冲动想去瞅见一下习大大的真容,"伟大的祖国,我爱你~~~&quo ...

  4. jquery基础知识3

    1.jquery的位置信息 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  5. BCB 如何让Application收到SendMessage发送来的消息

    一般,都是通过添加一个ApplicationEvent组件就可以接收到PostMessage发来的消息,那么如何收到SendMessage发来的消息呢? https://stackoverflow.c ...

  6. [终章]进阶20-流程控制结构--if/case/while结构 - 三个while的存储过程案例(批量生成表单数据) - 随机长度的随机字符串的存储过程案例

    . mysql 存储过程中尽量使用 @变量 而不用局部变量, @变量不容易报错!权限小,更改一下就报错! . sql中判断相等'=' ,用'=' 不用'=='. . #流程控制结构 /* 顺序结构: ...

  7. 【xsy1103】随机数表(RanMat)矩阵快速幂

    题目大意:你生成了一个随机数表,生成机制是这样子的: $a[i]=A1a[i-1]+A2(2≤i≤m)$ $b[i]=B1b[i-1]+B2(2≤i≤m)$ $M[1][y]=a[y]%P,(1≤y≤ ...

  8. 用vue开发一个所谓的数独

    1.前言 最近的后台管理系统页面,功能暂时没有新的需求,就在想首页放什么东西,最近我想到的就是放个所谓的数独,为什么是所谓的数独,因为规则不同于标准的数独,只要求每一行每一列数字不一样就可以了!这个实 ...

  9. celery timeout的拦截

    0X01 场景 celery任务超时报错,想查看是传入哪一类数据运行时导致的超时(哪一个插件),但是该报错难以拦截. [2019-06-30 17:23:21,070: ERROR/MainProce ...

  10. python导包问题,这一篇就够了

    解决办法: 将项目所在的根目录添加到sys.path中 在入口文件中加入如下代码: import sys import os # 将 项目的根目录添加到sys.path中 BASE_DIR = os. ...