© 老男孩老师 / 2017-09-22
一、阿里云RDS介绍
介绍:阿里云RDS(数据库)基于飞天大规模分布式计算和存储能力,提供超高性价比的单机版实例,同时利用读写分离横向扩展读能力,满足网站类的业务需求。提供稳定、高性能、安全可靠的数据库服务,针对电商秒杀场景进行专项优化,解决热点数据的高并发更新性能瓶颈,100倍性能提升。通过高安全模式,内置SQL注入检测模块,实时拦截风险SQL,保护数据安全。数据强一致性保证,满足金融级可靠性要求,搭建事前、事中、事后三层数据安全防护网,提供双机热备、同城、异地三中心部署架构,充分满足金融级合规可靠性要求。高稳定性,随时闪回任意时间点,对计算资源的弹性伸缩能力,赋予您更高的生产力,分钟级部署游戏分区数据库;主备双节点架构搭配高安全链路,实现全自动无感知容灾切换,业务稳定性先人一步。连接大数据存储、计算和可视化引擎,MySQL作为在线关系型数据存储服务,搭配E-MapReduce、HybridDB、DataV等,可满足如日志分析、数据仓库、商业智能、机器学习、科学模拟等业务。
二、阿里云RDS与ECS服务器搭建主从
1.购买服务器
本人属于贫穷系列,但是!! 为了试验。我买了2个小时的RDS
关于RDS硬件根据你的需求进行设置
2.创建数据库和用户
我们创建的数据库用户创建了2个
abcdocker 用于程序目录
mmm 用户mysql主从连接用户
提示: 我们abcdocker用于程序目录,需要读写权限,mmm作为主从连接用户授权只读即可
3.设置白名单和开通外网IP
设置白名单,因为我使用的是美国的一台vps所以需要设置白名单。不管哪的IP我们都需要设置白名单,数据库的连接尽量使用内网访问,增加安全性。
因为我的服务器和ECS不在一个网段,所以我需要开通公网IP
开通后
4.登陆数据库
因为我们只有abcdocker有读写权限,我们用abcdocker用户创建表
我们创建一个表
语法如下:
1.CREATE TABLE table1(id int AUTO_INCREMENT NOT null PRIMARY KEY ,
2. name VARCHAR (20),
3. age int,
4. class VARCHAR (20),
5. create_date DATETIME )
5.ECS数据库设置
环境
1.系统版本
2.[root@abcdocker ~]# cat /etc/redhat-release
3.CentOS release 6.8 (Final)
4.数据库版本
5.[root@abcdocker ~]# mysql -V
6.mysql Ver 14.14 Distrib 5.6.35, for Linux (x86_64) using EditLine wrapper
7.MySQL配置文件
8.[root@abcdocker ~]# grep '^[a-z]' /etc/my.cnf
9.server_id=211
10.read_only = 1
11.port = 3307
12.replicate-wild-ignore-table = mysql.%
13.replicate-wild-ignore-table = test.%
14.binlog_format = ROW
15.log-bin = mysql-bin
16.log-bin-index = mysql-bin.index
17.relay-log = relay-log
18.relay_log_index = relay-log.index
#GTID配置
1.gtid_mode=on
2.enforce_gtid_consistency=on
3.log-slave-updates = 1
4.sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
参考:MySQL GTID是在传统的mysql主从复制的基础之上演化而来的产物,即通过UUID加上事务ID的方式来确保每一个事物的唯一性。这样的操作方式使得我们不再需要关心所谓的log_file和log_Pos,只是简单的告诉从库,从哪个服务器上去找主库就OK了。简化了主从的搭建以及failover的过程,同时比传统的复制更加安全可靠。由于GTID是连续没有空洞的,因此主从库出现数据冲突时,可以通过注入空事物的方式进行跳过。本文主要讲述GTID主从架构的错误处理方式
使用GIID做主从可以执行一下参数,不需要设置binlog点
1.change master to MASTER_HOST='rm-2ze5i3w4h0182kua0o.mysql.rds.aliyuncs.com',
2.master_user='mmm',
3.master_password='Abcdocker!',
4.master_port=3306,
5.master_auto_position=1;
使用binlog进行记录
1.[root@abcdocker ~]# mysql -ummm -p -hrm-2ze5i3w4h0182kua0o.mysql.rds.aliyuncs.com
2.#我们需要远程连接到主库,执行show master status
3.mysql> show master status;
4.+------------------+----------+--------------+------------------+---------------------------------------------+
5.| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
6.+------------------+----------+--------------+------------------+---------------------------------------------+
7.| mysql-bin.000004 | 4273212 | | | 29fe5004-315c-11e7-9a0f-6c92bf477043:1-7365 |
8.+------------------+----------+--------------+------------------+---------------------------------------------+
9.1 row in set (0.16 sec)
执行命令
1.CHANGE MASTER TO
2.MASTER_HOST='rm-2ze5i3w4h0182kua0o.mysql.rds.aliyuncs.com', #这是主库的IP(域名也可以需要做解析)
3.MASTER_PORT=3306, #主库的端口,从库端口和主库不可以相同
4.MASTER_USER='mmm', #这是主库上创建用来复制的用户rep
5.MASTER_PASSWORD='Abcdocker!' #rep的密码
6.MASTER_LOG_FILE='mysql-bin.000025', #这里是show master status时看到的查询二进制日志文件名称,这里不能多空格
7.MASTER_LOG_POS=9155; #这里是show master status时看到的二进制日志偏移量,不能多空格
使用binglog记录或者使用GIID记录都可以,关于mysql主从可以参考
MySQL主从复制原理、半同步操作步骤及原理
开启从库
1.mysql> start slave;
2.Query OK, 0 rows affected, 1 warning (0.00 sec)
查看从库状态,我们需要看到两个yes
1.mysql> show slave status\G
2.*************************** 1. row ***************************
3. Slave_IO_State: Waiting for master to send event
4. Master_Host: rm-2ze5i3w4h0182kua0o.mysql.rds.aliyuncs.com
5. Master_User: mmm
6. Master_Port: 3306
7. Connect_Retry: 60
8. Master_Log_File: mysql-bin.000004
9. Read_Master_Log_Pos: 4276127
10. Relay_Log_File: relay-log.000006
11. Relay_Log_Pos: 33642
12. Relay_Master_Log_File: mysql-bin.000004
13. Slave_IO_Running: Yes
14. Slave_SQL_Running: Yes
15. Replicate_Do_DB:
16. Replicate_Ignore_DB:
17. Replicate_Do_Table:
18. Replicate_Ignore_Table:
19. Replicate_Wild_Do_Table:
20. Replicate_Wild_Ignore_Table: mysql.%,test.%
21. Last_Errno: 0
22. Last_Error:
23. Skip_Counter: 0
24. Exec_Master_Log_Pos: 4276127
25. Relay_Log_Space: 33809
26. Until_Condition: None
27. Until_Log_File:
28. Until_Log_Pos: 0
29. Master_SSL_Allowed: No
30. Master_SSL_CA_File:
31. Master_SSL_CA_Path:
32. Master_SSL_Cert:
33. Master_SSL_Cipher:
34. Master_SSL_Key:
35. Seconds_Behind_Master: 0
36.Master_SSL_Verify_Server_Cert: No
37. Last_IO_Errno: 0
38. Last_IO_Error:
39. Last_SQL_Errno: 0
40. Last_SQL_Error:
41. Replicate_Ignore_Server_Ids:
42. Master_Server_Id: 3482796583
43. Master_UUID: 29fe5004-315c-11e7-9a0f-6c92bf477043
44. Master_Info_File: /usr/local/mysql/data/master.info
45. SQL_Delay: 0
46. SQL_Remaining_Delay: NULL
47. Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
48. Master_Retry_Count: 86400
49. Master_Bind:
50. Last_IO_Error_Timestamp:
51. Last_SQL_Error_Timestamp:
52. Master_SSL_Crl:
53. Master_SSL_Crlpath:
54. Retrieved_Gtid_Set: 29fe5004-315c-11e7-9a0f-6c92bf477043:1-7376
55. Executed_Gtid_Set: 29fe5004-315c-11e7-9a0f-6c92bf477043:1-7376
56. Auto_Position: 1
57.1 row in set (0.00 sec)
查看是否开启成功
1.mysql> use abc;show tables;desc table1;
2.Database changed
3.+---------------+
4.| Tables_in_abc |
5.+---------------+
6.| table1 |
7.+---------------+
8.1 row in set (0.00 sec)
9.+-------------+-------------+------+-----+---------+----------------+
10.| Field | Type | Null | Key | Default | Extra |
11.+-------------+-------------+------+-----+---------+----------------+
12.| id | int(11) | NO | PRI | NULL | auto_increment |
13.| name | varchar(20) | YES | | NULL | |
14.| age | int(11) | YES | | NULL | |
15.| class | varchar(20) | YES | | NULL | |
16.| create_date | datetime | YES | | NULL | |
17.+-------------+-------------+------+-----+---------+----------------+
18.5 rows in set (0.00 sec)
三、总结
使用阿里云RDS和云服务器ECS做主从会出现主从数据不能及时同步,如果直接将ECS当从库会出现数据不一致的情况,在阿里云RDS与ECS主从环境,ECS服务器不适合用来当从库,只适合用于备份!
本文章版权归老男孩教育所有。转载请注明出处。有任何疑问可以随时给我们网站留言。
本文链接:http://www.oldboyedu.com/tuijian_wenzhang/index/id/105.html
(6)