<ins id="4rl9ji"><legend id="4rl9ji"></legend><small id="4rl9ji"></small></ins><dir id="4rl9ji"><center id="4rl9ji"></center><sup id="4rl9ji"></sup><dl id="4rl9ji"></dl></dir><optgroup id="4rl9ji"><dt id="4rl9ji"></dt><form id="4rl9ji"></form><acronym id="4rl9ji"></acronym><u id="4rl9ji"></u><font id="4rl9ji"></font></optgroup><del id="4rl9ji"><b id="4rl9ji"></b><table id="4rl9ji"></table><q id="4rl9ji"></q><address id="4rl9ji"></address></del>
    1. <dd id="t39lun"><dl id="t39lun"></dl><dir id="t39lun"></dir><pre id="t39lun"></pre><b id="t39lun"></b></dd><option id="t39lun"><sup id="t39lun"></sup><code id="t39lun"></code></option><code id="t39lun"><li id="t39lun"></li><legend id="t39lun"></legend><strong id="t39lun"></strong><ul id="t39lun"></ul><option id="t39lun"></option></code>

                          基于Docker-Compose的MySQL5.6 5.7 8.0高可用集群安裝

                          發表時間: 2020-01-06 04:15:51 閱讀: 296

                          轉至元數據起始 docker-compose構建 mysql 主從複制(讀寫分離)集群,此集群由3個MySQL實例組成,一個Master節點,2個Slave節點。Master可讀寫,Secondary可讀。集群之間會自動同步數據。 Master位于192.168.0.142服務器上, 兩個Slave位于192.168.0.11服務器上。

                          docker-compose構建 mysql 主從複制(讀寫分離)集群,此集群由3個MySQL實例組成,一個Master節點,2個Slave節點。Master可讀寫,Secondary可讀。集群之間會自動同步數據。

                          Master位于192.168.0.142服務器上, 兩個Slave位于192.168.0.11服務器上。


                          1. 下載MySQL鏡像

                          MySQL5.6是以朗尊軟件的的MySQL5.6鏡像作爲標准。

                          docker pull mysql:5.7
                          docker pull mysql:8.0.17

                          2.  docker-compose.yml


                          MySQL5.6的master
                          ?
                          version:"3"
                          services:
                          ### mysql container #########################################
                          mysql142:
                          container_name: mysql142
                          image: harbor.legendshop.cn/legendshop-public/mysql:5.6
                          restart: always
                          volumes:
                          - ./db/mysql/data:/var/lib/mysql
                          - ./db/mysql/conf.d:/etc/mysql/conf.d
                          restart: always
                          environment:
                          MYSQL_ROOT_PASSWORD: xxxxxx
                          TZ: Asia/Shanghai
                          command:
                          --max_allowed_packet=128M
                          ports:
                          - 3306:3306
                          MySQL5.7的Master配置
                          ?
                          version:"3"
                          services:
                          ### mysql container #########################################
                          mysql5.7-142:
                          container_name: mysql5.7-142
                          image: mysql:5.7
                          restart: always
                          volumes:
                          - ./db/mysql/data:/var/lib/mysql
                          - ./db/mysql/conf.d:/etc/mysql/conf.d
                          restart: always
                          environment:
                          MYSQL_ROOT_PASSWORD: xxxxxx
                          TZ: Asia/Shanghai
                          command:
                          --max_allowed_packet=128M
                          --default-authentication-plugin=mysql_native_password
                          --character-set-server=utf8mb4
                          --collation-server=utf8mb4_general_ci
                          --explicit_defaults_for_timestamp=true
                          --lower_case_table_names=1
                          ports:
                          - 3376:3306
                          MySQL8.0的Master配置
                          ?
                          version:"3"
                          services:
                          ### mysql container #########################################
                          mysql8-142:
                          container_name: mysql8-142
                          image: mysql:8.0.17
                          restart: always
                          volumes:
                          - ./db/mysql/data:/var/lib/mysql
                          - ./db/mysql/conf.d:/etc/mysql/conf.d
                          restart: always
                          environment:
                          MYSQL_ROOT_PASSWORD: xxxxxx
                          TZ:"Asia/Shanghai"
                          command:
                          --max_allowed_packet=128M
                          --default-authentication-plugin=mysql_native_password
                          --character-set-server=utf8mb4
                          --collation-server=utf8mb4_general_ci
                          --explicit_defaults_for_timestamp=true
                          --lower_case_table_names=1
                          ports:
                          - 3386:3306


                          注意編碼是采用utf8mb4,mysql的配置項在/db/mysql/conf.d目錄下,該目錄下增加mysql.cnf文件

                          MySQL5.6的配置
                          ?
                          [client]
                          default-character-set=utf8mb4
                          [mysql]
                          default-character-set=utf8mb4
                          [mysqld]
                          init_connect='SET collation_connection = utf8mb4_unicode_ci'
                          init_connect='SET NAMES utf8mb4'
                          character-set-server=utf8mb4
                          lower_case_table_names=1
                          collation-server=utf8mb4_unicode_ci
                          skip-character-set-client-handshake=FALSE
                          log-bin=mysql-bin
                          server-id=1
                          max_connections=2000
                          MySQL5.7的配置
                          ?
                          [client]
                          default-character-set=utf8
                          [mysql]
                          default-character-set=utf8
                          [mysqld]
                          transaction-isolation=READ-COMMITTED
                          init_connect='SET collation_connection = utf8_unicode_ci'
                          init_connect='SET NAMES utf8'
                          character-set-server=utf8
                          lower_case_table_names=1
                          collation-server=utf8_unicode_ci
                          skip-character-set-client-handshake
                          log-bin=mysql-bin
                          server-id=1
                          relay-log =relay-bin
                          relay-log-index = slave-relay-bin.index
                          max_connections=2000
                          innodb_log_file_size = 512M
                          MySQL8.0的配置
                          ?
                          [client]
                          default-character-set=utf8mb4
                          [mysql]
                          default-character-set=utf8mb4
                          [mysqld]
                          default-time-zone='+08:00'
                          character-set-server = utf8mb4
                          default_authentication_plugin=mysql_native_password
                          lower_case_table_names=1
                          log-bin=mysql-bin
                          server-id=1
                          relay-log =relay-bin
                          relay-log-index = slave-relay-bin.index


                          記得要填寫上server-id,用于做爲集群的服務ID

                          以下對Slave節點的docker-compose配置羅列出來。

                          MySQL5.6的SLAVE配置
                          ?
                          version:"3"
                          services:
                          ### mysql container #########################################
                          mysql101:
                          container_name: mysql101
                          image: harbor.legendshop.cn/legendshop-public/mysql:5.6
                          restart: always
                          volumes:
                          - ./db/mysql101/data:/var/lib/mysql
                          - ./db/mysql101/conf.d:/etc/mysql/conf.d
                          restart: always
                          environment:
                          MYSQL_ROOT_PASSWORD: xxxxxx
                          TZ: Asia/Shanghai
                          command:
                          --max_allowed_packet=128M
                          ports:
                          - 3306:3306
                          ### redis container #########################################
                          mysql102:
                          container_name: mysql102
                          image: harbor.legendshop.cn/legendshop-public/mysql:5.6
                          restart: always
                          volumes:
                          - ./db/mysql102/data:/var/lib/mysql
                          - ./db/mysql102/conf.d:/etc/mysql/conf.d
                          restart: always
                          environment:
                          MYSQL_ROOT_PASSWORD: xxxxxx
                          TZ: Asia/Shanghai
                          command:
                          --max_allowed_packet=128M
                          ports:
                          - 3307:3306
                          MySQL5.7的配置
                          ?
                          version:"3"
                          services:
                          ### mysql container #########################################
                          mysql5.7-101:
                          container_name: mysql5.7-101
                          image: mysql:5.7
                          restart: always
                          volumes:
                          - ./db/mysql101/data:/var/lib/mysql
                          - ./db/mysql101/conf.d:/etc/mysql/conf.d
                          restart: always
                          environment:
                          MYSQL_ROOT_PASSWORD: xxxxxx
                          TZ: Asia/Shanghai
                          command:
                          --max_allowed_packet=128M
                          ports:
                          - 3376:3306
                          ### redis container #########################################
                          mysql5.7-102:
                          container_name: mysql5.7-102
                          image: mysql:5.7
                          restart: always
                          volumes:
                          - ./db/mysql102/data:/var/lib/mysql
                          - ./db/mysql102/conf.d:/etc/mysql/conf.d
                          restart: always
                          environment:
                          MYSQL_ROOT_PASSWORD: xxxxxx
                          TZ: Asia/Shanghai
                          command:
                          --max_allowed_packet=128M
                          ports:
                          - 3377:3306
                          MySQL8.0的配置
                          ?
                          version:"3"
                          services:
                          ### mysql container #########################################
                          mysql8-101:
                          container_name: mysql8-101
                          image: mysql:8.0.17
                          restart: always
                          volumes:
                          - ./db/mysql101/data:/var/lib/mysql
                          - ./db/mysql101/conf.d:/etc/mysql/conf.d
                          restart: always
                          environment:
                          MYSQL_ROOT_PASSWORD: Ls@12345678@
                          TZ:"Asia/Shanghai"
                          command:
                          --max_allowed_packet=128M
                          --default-authentication-plugin=mysql_native_password
                          --character-set-server=utf8mb4
                          --collation-server=utf8mb4_general_ci
                          --explicit_defaults_for_timestamp=true
                          --lower_case_table_names=1
                          ports:
                          - 3386:3306
                          ### backup mysql container #########################################
                          mysql8-102:
                          container_name: mysql8-102
                          image: mysql:8.0.17
                          restart: always
                          volumes:
                          - ./db/mysql102/data:/var/lib/mysql
                          - ./db/mysql102/conf.d:/etc/mysql/conf.d
                          restart: always
                          environment:
                          MYSQL_ROOT_PASSWORD: Ls@12345678@
                          TZ:"Asia/Shanghai"
                          command:
                          --max_allowed_packet=128M
                          --default-authentication-plugin=mysql_native_password
                          --character-set-server=utf8mb4
                          --collation-server=utf8mb4_general_ci
                          --explicit_defaults_for_timestamp=true
                          --lower_case_table_names=1
                          ports:
                          - 3387:3306


                          對應SLAVE的mysql.conf的配置

                          MySQL5.6SLAVE第一個節點配置
                          ?
                          [client]
                          default-character-set=utf8
                          [mysql]
                          default-character-set=utf8
                          [mysqld]
                          init_connect='SET collation_connection = utf8_unicode_ci'
                          init_connect='SET NAMES utf8'
                          character-set-server=utf8
                          lower_case_table_names=1
                          collation-server=utf8_unicode_ci
                          skip-character-set-client-handshake
                          log-bin=mysql-bin
                          server-id=101
                          read_only=1
                          MySQL5.6SLAVE第二個節點的配置
                          ?
                          [client]
                          default-character-set=utf8
                          [mysql]
                          default-character-set=utf8
                          [mysqld]
                          init_connect='SET collation_connection = utf8_unicode_ci'
                          init_connect='SET NAMES utf8'
                          character-set-server=utf8
                          lower_case_table_names=1
                          collation-server=utf8_unicode_ci
                          skip-character-set-client-handshake
                          log-bin=mysql-bin
                          server-id=102
                          read_only=1

                          Slave節點配置爲read only模式, 由于篇幅問題這裏不再羅列mysql5.7,5.8的配置。

                          3. 配置 MySQL 主從複制

                          在master和2個slave都啓動完畢的狀態下, 進入master的mysql環境。

                          1. 首先連接 master 服務器,查看數據庫狀態

                          SHOW MASTER STATUS

                          記錄master上的日志文件名、position兩個值需要記住後面要用。

                          2. 在master中創建用戶

                          MySQL5.6 5.7的寫法:
                          GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY 'xxxxxx';
                          或者IP地址
                          GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.0.11' IDENTIFIED BY 'xxxxxx';

                          在MySQL8下創建賬號、分配權限的做法
                          CREATE USER 'backup'@'%' IDENTIFIED BY 'xxxxxx';

                          GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' WITH GRANT OPTION;

                          3. 配置slave

                          讓slave連接master,並開始重做master二進制日志中的事件。master_log_file的值爲上面的日志文件名;master_log_pos爲position的值
                          CHANGE MASTER TO
                          MASTER_HOST='192.168.0.142',
                          MASTER_USER='backup',
                          MASTER_LOG_FILE='mysql-bin.000002',
                          MASTER_LOG_POS=518,
                          MASTER_PORT=3317,
                          MASTER_PASSWORD='xxxxxx';

                          查看slave的狀態

                          SHOW SLAVE STATUS

                          Slave_IO_State狀態位Waiting for master to send event爲正常狀態。

                          Slave_IO_Running 正常狀態位Yes

                          Slave_SQL_Running正常狀態位Yes


                          4. 問題處理

                          4.1 Slave_SQL_Running和Slave_IO_Running狀態位No時無法通知Slave,執行以下腳本重新讓slave鏈接master

                          ?
                          STOP SLAVE ;
                          SETGLOBALSQL_SLAVE_SKIP_COUNTER=1; //如果是Slave_SQL_Running:no:
                          CHANGE MASTERTOMASTER_LOG_FILE='xxxx', MASTER_LOG_POS=xxxx;  //如果是slave_io_running:no,根據master的值重新執行一次
                          START SLAVE;
                          SHOW SLAVE STATUS  //直到slave狀態位正常才行


                          4.2.  Relay log 導致複制啓動失敗
                          新版本使用表來代替原來的文件,主要爲了crash-safe replication,從而大大提高從庫的可靠性。爲了保證意外情況下從庫的可靠性,
                          mysql.slave_master_info和mysql.slave_relay_log_info表必須爲事務性的表,從5.6.6起,這些表默認使用InnoDB存儲引擎。在5.6.5及之前的版本默認使用MyISAM引擎,可用下面語句進行轉換:
                          ALTER TABLE mysql.slave_master_info ENGINE=InnoDB;
                          ALTER TABLE mysql.slave_relay_log_info ENGINE=InnoDB;

                          reset slave幹的那些事:

                          1、刪除slave_master_info ,slave_relay_log_info兩個表中數據;
                          2、刪除所有relay log文件,並重新創建新的relay log文件;
                          3、不會改變gtid_executed 或者 gtid_purged的值
                          下面解決問題:


                          dba:(none)> reset slave;
                          Query OK, 0 rows affected (0.00 sec)
                          1
                          dba:(none)> change master to ......
                          1
                          2
                          dba:(none)> start slave;
                          Query OK, 0 rows affected (0.00 sec)
                          到這裏問題解決了。

                          【經驗】:以後用冷備份恢複實例後,在啓動slave前,先進行reset slave清空下以前的舊信息。


                          4.3. 設置slave1和slave2爲只讀

                          在配置文件my.cnf中的mysqld中配置read_only=1
                          注意:read_only=1只讀模式,可以限定普通用戶進行數據修改的操作,但不會限定具有super權限的用戶(如超級管理員root用戶)的數據修改操作。

                          如果想保證super用戶也不能寫操作,就可以就需要執行給所有的表加讀鎖的命令 “flush tables with read lock;”。這樣使用具有super權限的用戶登錄數據庫,想要發生數據變化的操作時,也會提示表被鎖定不能修改的報錯。


                          我們的一般做法是,給從庫分配一個普通用戶。

                          將slave數據庫read-only=1設置只讀後,在master執行GRANT USAGE ON *.* TO 'user01'@'localhost' IDENTIFIED BY'123456' WITH GRANT OPTION;(這裏要區別上面給從庫分配複制權限的寫法,這裏分配的是usage權限, 後面多了with grant option)

                          創建一個普通用戶,然後用普通用戶登錄從庫,執行操作會報錯。切換到root用戶後還是可以進行增刪改查的。


                          5. 登錄master數據庫測試

                          新增用戶和授權
                          1. 建立數據庫
                          CREATE DATABASE legendshop_test;
                          2. 創建用戶
                          grant all privileges on legendshop_sr1.* to legendshop_sr1@'%' identified by 'legendshop_sr1123';

                          在主庫做的動作同樣在從庫中會有相同的數據,否則就是無法同步數據了。

                          文章來源:廣州朗尊軟件科技有限公司

                          網站聲明:以上內容爲朗尊軟件官方網站的原創文章,如需轉載,請注明出處,謝謝幸福彩票精准人工计划首页!

                          電商頭條新聞
                          1 小羊雲商新零售解決方案
                          廣州朗尊軟件科技有限公司成立于2014年,公司立足自我創業,專門從事web開發及系統集成業務服務,系統咨詢服務和集成
                          2 開通商城的步驟
                          如何注冊新用戶,開通商城
                          3 Legendshop線上與線下系統的微服務平台的解決方案
                          Legendshop微服務平台解決方案
                          4 分析互聯網産品的情感化設計
                          相信關注情感化設計話題的人大部分都看過諾曼的《情感化設計》一書,但諾曼談得太宏觀、太概念化了。我想談談對互聯網産品情感化設計的理解及操作方法
                          5 S2B2C模式是什麽?
                          廣州朗尊軟件科技有限公司成立于2014年,公司立足自我創業,專門從事web開發及系統集成業務服務,系統咨詢服務和集成
                          6 社交美妝時代,新品牌如何打造爆款
                          隨著各種直播、社交媒體平台的興起,每年都會有不同的美妝爆款産品出現。那麽這些爆款都是通過哪些方式讓美妝達人都爲之傾倒呢?在社交媒體成長的千禧一代時代到來,在消費者賦能,注意力稀缺,産業鏈重塑的背景下,他們改寫原有的商業競爭機制。
                          7 b2b2c商城系統能爲企業帶來什麽?
                          b2b2c是一種電子商務模式,企業選擇做自己的b2b2c商城系統最終當然是爲了盈利。下面b2b2c商城系統小編帶你一起來看看。
                          8 朗尊軟件晉級中國創新創業大賽第四屆羊城“科創杯”創新創業大賽複賽
                          中國創新創業大賽是由科技部、財政部、教育部、中央網信辦、全國工商聯共同指導舉辦的一項以“科技創新,成就大業”爲主題的全國性比賽。爲加快實施創新驅動發展戰略,整合創新創業資源,搭建創新創業服務平台,引導社會各界力量支持創新創業,打造推動經濟發展和轉型升級的強勁引擎,廣州市科學技術局特舉辦第八屆中國創新創業大賽(廣東·廣州賽區)暨第四屆羊城“科創杯”創新創業大賽。
                          • 客服熱線:020-84131336
                          • 在線時間:周一至周六 9:00-19:00
                          • 在線客服
                          微信服務號
                          X-POWER-BY FNC V1.0.0 FROM 自制53