1. 程式人生 > >阿里雲RDS與ECS伺服器資料庫做主從

阿里雲RDS與ECS伺服器資料庫做主從

一、阿里雲RDS介紹

介紹:阿里雲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 -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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

#GTID配置

gtid_mode=on
enforce_gtid_consistency=on
log-slave-updates = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
  • 1
  • 2
  • 3
  • 4
  • 5
參考: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;
  • 1
  • 2
  • 3
  • 4
  • 5

使用binlog進行記錄

[[email protected] ~]# 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)
  • 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',            #這是主庫上建立用來複制的使用者rep
MASTER_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: 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)
  • 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

相關推薦

阿里RDSECS伺服器資料庫主從

一、阿里雲RDS介紹介紹:阿里雲RDS(資料庫)基於飛天大規模分散式計算和儲存能力,提供超高性價比的單機版例項,同時利用讀寫分離橫向擴充套件讀能力,滿足網站類的業務需求。提供穩定、高效能、安全可靠的資料庫服務,針對電商秒殺場景進行專項優化,解決熱點資料的高併發更新效能瓶頸,100倍效能提升。通過高安全模式,內

記一次阿里RDS自建資料庫同步中斷的補救過程

背景 2018年4月24日上午9點左右,小編在即將託管的伺服器上建立資料庫,並通過openvpn建立加密隧道,從而實現阿里雲RDS和本地自建資料庫之間同步。在託管伺服器上配置openvpn後,重啟openvpn客戶端時,一直獲取不到ip,後面重啟了一下openvpn服務端,本地託管伺服器獲取到了IP,之後小

阿里RDSECS自建庫搭建主從複製

前言 最近嘗試在阿里雲RDS與ECS自建庫之間搭建主從複製,主要是想用於備份資料,所以對於同步一致性要求不是很高.模擬了幾次,遇到的一些坑記錄在這裡,使用的是基於GTID的主從服務,關於GTID: MySQL GTID是在傳統的mysql主從複製的基礎之上

阿裏RDSECS自建庫搭建主從復制

lock 數據庫 rest 你在 RKE 腳本 self. res usr 前言 最近嘗試在阿裏雲RDS與ECS自建庫之間搭建主從復制,主要是想用於備份數據,所以對於同步一致性要求不是很高.模擬了幾次,遇到的一些坑記錄在這裏,使用的是基於GTID的主從服務,關於GTID:

【故障公告】阿里 RDS 資料庫伺服器 CPU 100% 造成全站故障

非常非常抱歉,今晚 19:34 ~ 21:16 園子所使用的阿里雲 RDS 資料庫伺服器突然出現 CPU 100% 問題,造成全站無法正常訪問,由此您帶來了很大的麻煩,請您諒解。 故障經過是這樣的。19:34 這個時間點本來是一個訪問低峰,資料庫壓力比訪問高峰時低很多,但資料庫伺服器卻異想天開、吃飽了

(轉)一次血的教訓,阿里rds mysql 資料庫,本地化並日志恢復已刪除的兩天資料

原文連結 參考阿里雲幫助文件 案例背景,勿刪公司線上資料庫使用者表(阿里去rds mysql),情急之下,將其恢復至最近備份(兩天前,阿里雲自動備份策略),恢復完後的第二天發現,備份與刪庫期間有些資料是重要且有用的,於是領導強烈希望能恢復期間資料,以減少公司損失,

Python 備份阿里RDS資料庫

#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Author: # @Date : 2018/10/11 # !/usr/bin env python3 # 你需要匯入這個模組 import os import time

Python 大資料庫備份阿里RDS資料庫分表匯出壓縮

思路:因為有的資料庫比較大,整體壓縮之後還是會有幾個G內容,既不方便下載也不方便恢復,然後就想到了對獨立的表分開進行備份。 1.連線阿里雲rds 2.建立資料夾,層級關係(資料庫名->日期->表名壓縮包) 3.迴圈需要備份的資料庫 4.從相應的資料庫查詢全

阿里RDS-MYSQL資料庫引數設定

2016.9.2 最近被資料庫要搞瘋掉了 取消myisam引擎,都換成innodb 總是主備切換,也沒有錯誤日誌 看了看引數設定,很多都不知道 這兩天有時間自己搜尋整理了下 發給大家,有需要的看看 我的伺服器應用主要是WEB網站服務 有一些不懂的地方或者不對的地方,還請大

阿里RDS資料恢復到本地MySQL資料庫

1.工具下載 RDS MySQL 使用開源軟體 percona-Xtrabackup 對MySQL 資料庫進行備份。需要下載該軟體,然後使用該軟體進行恢復。 下載解壓工具 rds_backup_extract (sh 檔案)

阿里輕量應用伺服器伺服器ecs區別?輕量應用伺服器介紹

阿里雲輕量應用伺服器是阿里雲新推出的伺服器,本文介紹阿里雲輕量伺服器的價格,已經何為“輕量”?輕量與阿里雲ECS伺服器有什麼區別?輕量效能就一定不如ECS伺服器嗎?什麼是輕量應用伺服器?輕量應用伺服器是面向單機應用場景的新一代計算服務,提供精品應用一鍵部署,支援一站式的域名、

記錄一次阿里RDS-Mysql備份檔案,本地windows資料庫恢復過程

恢復雲資料庫MySQL的備份檔案到自建資料庫 https://help.aliyun.com/knowledge_detail/41817.html 官方給的是linux系統的恢復教程現在我們本地mysql資料庫是windows系統的mysql,以下是下載rds備份包在本地的

阿里RDS的mysql資料庫佔用空間超過90%的處理

阿里雲RDS資料庫最大支援2T,目前已經佔用了90%,如果進行分庫或者遷移比較麻煩,思路是找出佔用空間過大的日誌或不重要的檔案進行刪除操作 查詢所有資料庫佔用磁碟空間大小的SQL語句: show binary logs;  show variables like '%log

阿里RDS文件概述——概述請求方式

呼叫方式: 對RDS API介面呼叫是通過向RDS API的服務端地址傳送HTTP GET請求 並按照介面說明在請求中加入相應請求引數來完成的 根據請求的處理情況,系統會返回處理結果。 請求結構: 服務地址: RDS API的服務接入地址為:rds.aliyuncs.com 通訊協議: 支援通過HTTP

上的芯髒病:奇怪的阿里 RDS 資料庫突發 CPU 近 100% 問題

最近遇到了奇怪的阿里雲 RDS 資料庫突發 CPU 近 100% 問題,遇到了3次。 第一次是10月12日(週六)凌晨 3:24 負載極低的時候開始出現,早上發現後進行了主備切換,恢復了正常。 第二次也是出現在10月12日,就在主備切換後不久,發現後又進行了主備切換,切換回之前出問題的伺服器,恢復了正常。

阿里 RDS 資料庫又發 CPU 近 100% 的“芯髒病”

最近雲界發生了2件事,一件是大事,一件是小事,大事是阿里雲與微軟合作推出了開放應用模型 Open Application Model(OAM),小事是由於微軟 SQL Server 在阿里雲上水土不服(僅是我們的猜測),阿里雲 SQL Server RDS 患上了間隙性芯髒病,該病容易在夜間酣睡的時候發病

【故障公告】阿里 RDS 資料庫突發 CPU 近 100% 引發全站故障

今天晚上9點我們收到阿里雲的告警通知: 【阿里雲監控】華東1(杭州)-雲資料庫RDS版<cnblogsdb> [instanceId=xxx] 於21:00 發生告警, 前往診斷 CPU使用率平均值(98.25>=80 ), 持續時間4分鐘, rds_Cp

【故障公告】阿里 RDS SQL Server 資料庫例項 CPU 100% 引發全站故障

非常抱歉,今天 8:48 開始,我們使用的阿里雲 RDS SQL Server 資料庫例項突然出現 CPU 100%  問題,引發全站故障,由此給您帶來麻煩,請您諒解。 發現故障後立即進行主備切換,和往常一樣,第1次主備切換失敗,第2次主備切換完成後恢復正常。 上次同樣故障發生在2020年11月

阿里CentOS搭建SVN伺服器及許可權管理

  linux(centos)下SVN伺服器如何搭建?說到SVN伺服器,想必大家都知道,可以是在LINUX下如何搭建SVN伺服器呢?那麼今天給大家分享一下linux(centos)搭建SVN伺服器的思路!    雖然在windows上搭建SVN很簡單,但是效能卻不高,

阿里輕量應用伺服器debian8.9用apache多埠搭建多站點

前幾天想要再搭個網站玩玩,就用阿里的伺服器,apache本地搭建站點和伺服器相差不多,然而卻踩了大坑,差點耗死在這兒。 先進入apache這個目錄,有如下資料夾: 開啟ports.conf,  新增 Listen 埠。 然後進入,sites-available 裡邊, 將000-defau