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

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

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

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

mysqlmysql

1、阿里云RDS介绍

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

image_1bfbv4lm31odl1vc11dvj24m1pof9.png-89.7kB

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


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

1.购买服务器docker

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

12.png-84.6kB

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

13.png-47.6kB

2.建立数据库和用户服务器

14.png-44.4kB

9w.png-54.6kB

咱们建立的数据库用户建立了2个架构

abcdocker 用于程序目录并发

mmm 用户mysql主从链接用户app

提示: 咱们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 )

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)

3、总结

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

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

相关文章
相关标签/搜索