百萬級mysql從庫搭建

背景:

 1.當前mysql:Ucloud高可用數據庫實例,所屬區域在北京。

 2.異地容災需求、跨平臺同步、後期的異地雙活需求。

 3.新建從庫:阿里雲華南自建mysql。  

考察:

    1.Ucloud數據庫實例基於mysql原版進行了二次開發,在結構上有些調整,在爲每個實例搭配一個phpadmin進行管理,算是比較簡單。高可用實例主庫已做雙主熱備。Mysql5.7後支持一從多主。

    2.Aliyun數據庫實例也進行過調整,修改比較多,對mysql庫管控比較嚴以配合控制檯的數據庫管理。

    3.Aliyun數據庫管理提供DTS工具,用於遷移數據,功能比較強大:遷移粒度、持續數據遷移(間接達到數據同步)、適合環境多。不適用當前需求原因:DTS遷移自建數據庫需要公網訪問源實例,太不安全。

    4.跨平臺異地雙活目前來看只能通過自建實現,業務架構還要大幅度調整。先實現跨平臺異地備份吧。

    5.Mysl同步的數據包默認是明文傳輸,支持ssl驗證,但在雲平臺上似乎不好實現(內網訪問),先通過使用安全組控制訪問解決安全問題,後期建立***,包傳輸走隧道改進。

情景彙總:

Mysql主(10.10.123.231):ucloud北京機房、高可用實例、內網訪問、版本爲5.6.20-ucloudrel1-log
Mysql從(172.17.3.42):aliyun華南自建

步驟:

   1.準備工作
    aliyun平臺新建ECS實例;根據源mysql版本安裝相近版本,選擇的mysql5.6.38,下載rpm包後,使用yum安裝;初始化數據庫,修改配置文件,並啓動。
    考慮到後期會使用DTS,按建議添加配置;mysql5.6後添加了GTID作用於同步,主從配置要一致:

server_id=23
gtid_mode=on
enforce_gtid_consistency=on
log_bin=mysql_bin
binlog_format=row
binlog_row_image=full
log-bin-trust-function-creators=1

2.數據導入:從ucloud控制檯找到源mysql的最新備份,下載並導入到自建的mysql中。
   下載備份遇到問題:瀏覽器能正常下載,在linux下使用wget下載報403
百萬級mysql從庫搭建
    解決辦法:對下載地址用引號引入。

   備份壓縮包接近40G,使用source導入耗時超過一天。

3.搭建端口轉發(類似於mysql代理服務器)
   選擇一臺與源mysql同內網的centos 7 (內網IP:10.10.123.233,外網IP:123.123.123.123),配置iptables轉發3306端口的流量,實現新建的mysql實例訪問到主庫。

# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A PREROUTING -d 10.10.123.233 -p tcp --dport 3306 -j DNAT --to-destination 10.10.123.231:3306
# iptables -t nat -A POSTROUTING -d 10.10.123.231 -p tcp --dport 3306 -j SNAT --to-source 10.10.123.233

  並在新建從庫中測試好連通性。

4.主從配置

主要命令:
> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%' IDENTIFIED BY ‘123456’;     //添加主從同步的用戶
> change master to \
master_host=”123.123.123.123”,\
master_port=3306,\
master_user=’slave’,\
master_password=’123456’,\
master_log_file=’mysql-bin.000383’,\
master_log_pos=’888039274’;     //配置主庫信息
> start slave;
> show slave status\G;

    獲取同步的binlog文件和位置:下載的備份文件中有,在文件前100行可以找到(推斷ucloud備份是用mysqldump命令配合--single-transaction --master-data=2參數)。

遇到的問題及解決

  1.查看主從同步,報錯:無法從master獲取日誌
百萬級mysql從庫搭建
   Last_IO_Error: Relay log write failure: could not queue event from master
   原因:配置主從同步的binlog位置異常,需要重新指定。

> show master status;
> show master logs;     //查看可用的binlog文件
> show binlog events in 'mysql-bin.000383' from 888039274 limit 2;      //指定開始位置和顯示數量

百萬級mysql從庫搭建
  果然是個比較特殊的位置,直接在mysql下查不到。還好還可以使用mysqlbinlog工具查看。
  下載binlog,解壓得到mysql-bin.000383文件

# mysqlbinlog  --start-position=888039200 --stop-position=888039300 mysql-bin.000383 //用大概的位置查找,報錯

百萬級mysql從庫搭建

  只能全部導出,在定位了:

# mysqlbinlog  mysql-bin.000383 > 383bin.log

  查找到的範圍爲:
百萬級mysql從庫搭建
  重新配置position位置,並重啓slave進程即可。

  2.查看主從同步狀態,報錯:重複鍵問題,可能是剛剛調整了log_position導致的
百萬級mysql從庫搭建
考慮到先只做備份,將類似錯誤忽略即可。
    解決辦法:在mysqld配置文件中添加 slave-skip-errors = 1062,並重啓mysql服務即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章