日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

搭建Mysql-proxy实现主从同步读写分离

發布時間:2025/7/14 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搭建Mysql-proxy实现主从同步读写分离 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代理服務器 Wg61 192.168.0.180 (Mysql-proxy)
主服務器 Wg62 192.168.0.142 (負責寫入數據)
從服務器 Wg63 192.168.0.156 (負責只讀數據)

實驗思路:

  • 下載Mysql-proxy,在代理服務器Wg61上安裝lua語言
  • Wg61安裝proxy,添加/etc/profile的環境變量參數
  • 修改proxy配置文件參數,測試讀寫分離
  • 搭建主從服務器,創建測試數據庫表并授權用戶訪問權限
  • 啟動Mysql-proxy測試讀寫分離
  • 測試從服務器掛掉,主服務器掛掉如何
    步驟如下:
    1、 Wg61服務器上安裝lua語言,Mysql-proxy需要lua語言調用
    [root@Wg61 ~]# yum-y insall lua
    2、 下載Mysql-proxy安裝包到Wg61并解壓到/usr/local/下
    [root@Wg61 ~]# wget http://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz--no-check-certificate
    [root@Wg61 ~]# tar-xf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/
    [root@Wg61 ~]# cd/usr/local/
    [root@Wg61 local]# ls
    bin games lib libexec sbin src
    etc include lib64 mysql-proxy-0.8.5-linux-el6-x86-64bit share
    [root@Wg61 local]#mv mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy
    3、 修改環境變量參數
    [root@Wg61 local]#vim /etc/profile
    最后添加exportPATH=/usr/local/mysql-proxy/bin/:/usr/local/mysql/bin:$PATH
    [root@Wg61 local]# source!$
    source /etc/profile 對命令生效
    4、 修改Mysql-proxy配置文件參數,測試讀寫分離
    [root@Wg61 local]#vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
    40 min_idle_connections = 1, 在41行和42行將最小鏈接數改成1
    41 max_idle_connections = 1,
    5、 Wg62主服務器上創建測試文件,并授權用戶user1訪問權限
    mysql>show databases;
    +--------------------+
    |Database |
    +--------------------+
    |information_schema |
    |mysql |
    |test |
    +--------------------+
    3rows in set (0.00 sec)
  • mysql>create database HK;
    QueryOK, 1 row affected (0.00 sec)

    mysql>use HK;
    Databasechanged
    mysql>create table city(id int);
    QueryOK, 0 rows affected (0.02 sec)

    mysql>insert into city values(123);
    QueryOK, 1 row affected (0.00 sec)

    mysql>select * from city ;
    +------+
    |id |
    +------+
    | 123 |
    +------+
    1row in set (0.00 sec)

    mysql>grant all on HK.* to user1@'%' identified by '123456';

    6、 Wg63從服務器上創建測試文件,并授權用戶user1訪問權限
    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | test |
    +--------------------+
    3 rows in set (0.00 sec)

    mysql> create database HK;
    Query OK, 1 row affected (0.00 sec)

    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | HK |
    | mysql |
    | test |
    +--------------------+
    4 rows in set (0.00 sec)

    mysql> create table city(id int);
    ERROR 1046 (3D000): No database selected
    mysql> use HK;
    Database changed
    mysql> create table city(id int);
    Query OK, 0 rows affected (0.06 sec)

    mysql> insert into city values(456);
    Query OK, 1 row affected (0.00 sec)

    mysql> select * from city;
    +------+
    | id |
    +------+
    | 456 |
    +------+
    1 row in set (0.00 sec)

    mysql> grant allon HK.* to user1@'%' identified by'123456';

    7、 Wg1服務器上啟動Mysql-proxy服務
    [root@Wg61 local]#mysql-proxy
    --proxy-read-only-backend-addresses=192.168.0.156:3306
    --proxy-backend-addresses=192.168.0.142:3306
    --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua&
    [1] 2044
    [root@Wg61 local]#2018-01-04 05:25:31: (critical) plugin proxy 0.8.5 started

    另開一個窗口查看服務是否啟動成功:
    [root@Wg61 ~]# lsof -i :4040
    COMMAND PIDUSER FD TYPE DEVICE SIZE/OFF NODE NAME
    mysql-pro 2044root 9u IPv4 12940 0t0 TCP *:yo-main (LISTEN)
    參數說明:
    --proxy-read-only-backend-addresses=192.168.0.111:3306 # 定義后端只讀服務器
    --proxy-backend-addresses=192.168.0.112:3306 #定義后端mysql主服務器地址,指定mysql寫主服務器的端口
    --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua& #指定lua腳本,在這里,使用的是rw-splitting腳本,用于讀寫分離
    當有多個只讀服務器時,可以寫多個以下參數:
    --proxy-read-only-backend-addresses=192.168.0.111:3306 # 定義后端只讀服務器
    --proxy-read-only-backend-addresses=192.168.0.112:3306 # 定義后端只讀服務器
    #--proxy-address=192.168.0.110:3307指定mysql proxy的監聽端口,默認為:4040

    8、 測試讀寫功能
    (1) 測試寫操作:可以查看到Wg62數據信息,也可寫入數據,看不到Wg63數據
    mysql>select user();
    +---------------------+
    |user() |
    +---------------------+
    |user1@192.168.0.180 |
    +---------------------+
    1row in set (0.00 sec)

    mysql>show databases;
    +--------------------+
    |Database |
    +--------------------+
    | information_schema|
    |HK |
    |test |
    +--------------------+
    3rows in set (0.00 sec)

    mysql>use HK;
    Readingtable information for completion of table and column names
    Youcan turn off this feature to get a quicker startup with -A

    Databasechanged
    mysql>use HK;
    Databasechanged
    mysql>show tables;
    +--------------+
    |Tables_in_HK |
    +--------------+
    |city |
    +--------------+
    1row in set (0.00 sec)

    mysql>select * from city;
    +------+
    |id |
    +------+
    | 123 |
    +------+
    1row in set (0.00 sec)

    mysql>insert into city values(1313);
    QueryOK, 1 row affected (0.00 sec)

    mysql>select * from city;
    +------+
    |id |
    +------+
    | 123 |
    | 1313 |
    +------+
    2rows in set (0.00 sec)
    (2) 測試讀數據
    從Wg2模擬客戶端登入顯示未從服務器數據,可查看到對應數據信息
    [root@Wg62 ~]# mysql-uuser1 -p123456 -P4040 -h192.168.0.180
    [root@Wg62 ~]# mysql -uuser1 -p123456 -P4040-h192.168.0.180
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 10
    Server version: 5.1.73 Source distribution

    Copyright (c) 2000, 2013, Oracle and/or itsaffiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporationand/or its
    affiliates. Other names may be trademarks of theirrespective
    owners.

    Type 'help;' or '\h' for help. Type '\c' to clear thecurrent input statement.

    mysql> select * from HK.city;
    +------+
    | id |
    +------+
    | 456 |
    +------+
    1 row in set (0.00 sec)

    mysql> Ctrl-C -- exit!
    Aborted
    [root@Wg62 ~]# mysql -uuser1 -p123456 -P4040-h192.168.0.180
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 11
    Server version: 5.1.73 Source distribution

    Copyright (c) 2000, 2013, Oracle and/or itsaffiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporationand/or its
    affiliates. Other names may be trademarks of theirrespective
    owners.

    Type 'help;' or '\h' for help. Type '\c' to clear thecurrent input statement.

    mysql> select * from HK.city;
    +------+
    | id |
    +------+
    | 456 |
    +------+
    1 row in set (0.01 sec)

    mysql> select user();
    +---------------------+
    | user() |
    +---------------------+
    | user1@192.168.0.180 |
    +---------------------+
    1 row in set (0.00sec)
    插入數據顯示成功,但是查詢發現沒有插入數據
    mysql> insert into HK.city values(4545);
    Query OK, 1 row affected (0.01 sec)

    mysql> select * from HK.city;
    +------+
    | id |
    +------+
    | 456 |
    +------+
    1 row in set (0.00 sec)

    mysql> insert into HK.city values(232323);
    Query OK, 1 row affected (0.00 sec)

    mysql> select from HK.city;
    +------+
    | id |
    +------+
    | 456 |
    +------+
    1 row in set (0.00sec)
    9、 配置MYsql主從并實現讀寫分離
    (1) 同步Wg2和Wg3兩臺服務器數據信息
    [root@Wg62 ~]#mysqldump -uroot -p -A > all.sql
    [root@Wg62 ~]# scpall.sql 192.168.0.156:/root/
    [root@Wg63 ~]# mysql-uroot -p123456
    mysql> source/root/all.sql
    (2) Wg2主服務器配置為MASTER,并授權user2用戶作為同步用戶
    [root@Wg62 ~]# vim/etc/my.cnf
    log-bin=mysql-binlog
    binlog-do-db=HK
    binlog_format=row
    server-id=1
    mysql> grant all on .*to user2@'%' identified by '123456';
    重啟數據庫

    (3) Wg3從服務器配置為SLAVE
    方法一:[root@Wg63 ~]#vim /etc/my.cnf
    master_host='192.168.0.142'
    master_user='user2'
    master_password='123456'
    方法二:登入數據庫
    MySQL>changemaster to master_host='192.168.0.142',master_user='user2',master_password='123456';
    重啟數據庫
    10、測試通過Mysql-proxy是否實現主從同步讀寫分離
    (1) 查看主從是否同步
    mysql> select user();
    +---------------------+
    | user() |
    +---------------------+
    | user1@192.168.0.180 |
    +---------------------+
    1 row in set (0.00 sec)

    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | HK |
    | test |
    +--------------------+
    3 rows in set (0.00 sec)

    mysql> use HK;
    Reading table information for completion of table andcolumn names
    You can turn off this feature to get a quicker startupwith -A

    Database changed
    mysql> use HK;
    Database changed
    mysql> select * from city;
    +--------+
    | id |
    +--------+
    | 123 |
    | 1313 |
    | 4545 |
    | 232323 |
    +--------+
    4 rows in set (0.00 sec)

    mysql> insert into city values(789);
    Query OK, 1 row affected (0.00 sec)

    mysql> select * from city;
    +--------+
    | id |
    +--------+
    | 123 |
    | 1313 |
    | 4545 |
    | 232323 |
    | 789 |
    +--------+
    5 rows in set (0.00 sec)
    登入主服務器查看,顯示插入成功
    登入從服務器查看,顯示同步成功
    mysql> select user();
    +----------------+
    | user() |
    +----------------+
    | root@localhost |
    +----------------+
    1 row in set (0.00 sec)

    mysql> select * from HK.city;
    +--------+
    | id |
    +--------+
    | 123 |
    | 1313 |
    | 4545 |
    | 232323 |
    | 789 |
    +--------+
    5 rows in set (0.00sec)
    (2) 測試從服務器宕機(可寫入查看數據)
    mysql> insert into HK.city values(888);
    Query OK, 1 row affected (0.01 sec)

    mysql> select * from HK.city;
    +--------+
    | id |
    +--------+
    | 123 |
    | 1313 |
    | 4545 |
    | 232323 |
    | 789 |
    | 0 |
    | 888 |
    +--------+

    7 rows in set (0.00sec)

    總結:1.當停止掉 slave 數據庫,proxy 的查詢就會轉移到 master 上,當把 slave 啟動后,proxy 依然在讀 master,當有新的鏈接進來的時候才會重新去讀取 slave 的數據。有時可能需要重啟下 mysql-proxy

  • 從服務器恢復后,再次同步剛剛所插入的數據
    (3) 測試主服務器宕機
    mysql> select * from HK.city
    -> ;
    +--------+
    | id |
    +--------+
    | 123 |
    | 1313 |
    | 4545 |
    | 232323 |
    | 789 |
    | 0 |
    | 888 |
    +--------+
    7 rows in set (0.00 sec)
  • mysql> use HK;
    ERROR 2013 (HY000): Lost connection to MySQL serverduring query
    mysql> insert into HK.city values(999);
    ERROR 2006 (HY000): MySQL server has gone away
    No connection. Trying to reconnect...
    Connection id: 6
    Current database: NONE

    ERROR 2013 (HY000):Lost connection to MySQL server during query
    顯示只能讀取數據不能寫入數據

    Mysql主從詳細搭建過程可參考此鏈接https://blog.51cto.com/13719714/2107950

    轉載于:https://blog.51cto.com/13719714/2107691

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的搭建Mysql-proxy实现主从同步读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。