阿里雲RDS與ECS服務器數據庫作主從

1、阿里雲RDS介紹

介紹:[阿里雲](https://l.gushuji.site/aliyun)RDS(數據庫)基於飛天大規模分佈式計算和存儲能力,提供超高性價比的單機版實例,同時利用讀寫分離橫向擴展讀能力,知足網站類的業務需求。提供穩定、高性能、安全可靠的數據庫服務,針對電商秒殺場景進行專項優化,解決熱點數據的高併發更新性能瓶頸,100倍性能提高。經過高安全模式,內置SQL注入檢測模塊,實時攔截風險SQL,保護數據安全。數據強一致性保證,知足金融級可靠性要求,搭建事前、事中、過後三層數據安全防禦網,提供雙機熱備、同城、異地三中心部署架構,充分知足金融級合規可靠性要求。高穩定性,隨時閃回任意時間點,對計算資源的彈性伸縮能力,賦予您更高的生產力,分鐘級部署遊戲分區數據庫;主備雙節點架構搭配高安全鏈路,實現全自動無感知容災切換,業務穩定性先人一步。鏈接大數據存儲、計算和可視化引擎,MySQL做爲在線關係型數據存儲服務,搭配E-MapReduce、HybridDB、DataV等,可知足如日誌分析、數據倉庫、商業智能、機器學習、科學模擬等業務。

image_1bfbv4lm31odl1vc11dvj24m1pof9.png-89.7kB

提示: 雖然阿里雲介紹的不錯,可是這價格也確實是不便宜。可是針對於中小公司,RDS仍是比較經濟實惠、穩定的。mysql


2、阿里雲RDS與ECS服務器搭建主從

1.購買服務器sql

本人屬於貧窮系列,可是!! 爲了試驗。我買了2個小時的RDS 
12.png-84.6kBdocker

關於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.7kBapp

咱們建立一個表 
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

3、總結

使用阿里雲RDS和雲服務器ECS作主從會出現主從數據不能及時同步,若是直接將ECS當從庫會出現數據不一致的狀況,在阿里雲RDS與ECS主從環境,ECS服務器不適合用來當從庫,只適合用於備份!

因爲阿里雲RDS成本太高,能夠考慮在ECS服務器上搭建mysql集羣,可是安全性可能沒RDS高。由於是自建庫,可能會出現的問題比較多

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

相關文章
相關標籤/搜索