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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql5.7主从同步与读写分离

發(fā)布時間:2024/2/28 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql5.7主从同步与读写分离 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

讀寫分離

  • Mysql主從復(fù)制的過程
    • 讀寫分離原理
    • 配置主從同步
    • 主服務(wù)編譯
    • 部署第一臺從服務(wù)器
    • 部署第2臺從服務(wù)器配置
  • 配置讀寫分離關(guān)鍵服務(wù)
    • 定義具體的讀寫分離對象
    • 配置amoeba的主配置文件amoeba.xml
    • 測試客戶端
    • 測試讀寫分離

Mysql主從復(fù)制的過程

  • 開啟二進制日志文件
  • I/O線程同步日志
  • SQI讀取中繼日志存入數(shù)據(jù)庫


數(shù)據(jù)MySQL、主數(shù)據(jù)更新寫入bing log 日志(二進制日志),通過l/o線程寫入mysql從到relay log(中繼日志)中,通過sql線程讀取中繼日志進行數(shù)據(jù)更新刪除

讀寫分離原理

  • 只在主服務(wù)器上寫,只在從服務(wù)器上讀

  • 主數(shù)據(jù)庫處理事務(wù)查詢,從數(shù)據(jù)庫處理select查詢

  • 數(shù)據(jù)庫復(fù)制用于將事務(wù)性查詢的變更同步到集群中的從數(shù)據(jù)庫

需要創(chuàng)建的三種賬戶:
1.master要創(chuàng)建權(quán)限賬戶(主從復(fù)制賬戶),允許slave能夠讀取進行復(fù)制
2.創(chuàng)建(讀寫分離賬戶),在讀、寫的每一臺服務(wù)器上都要有
3.客戶端訪問Amoeba的賬戶,此賬號和數(shù)據(jù)庫沒關(guān)系

讀寫分離方案

  • 基于程序代碼內(nèi)部實現(xiàn)
  • 基于中間代理層實現(xiàn)
  • Amoeba

編寫環(huán)境

4臺服務(wù)器每臺服務(wù)器都裝有Mysql服務(wù)

  • 主服務(wù)器地址:192.168.136.88
  • 從服務(wù)1地址:192.168.136.40
  • 從服務(wù)器2地址:192.168.136.77
  • Amoeba服務(wù)器
  • 配置主從同步

    主服務(wù)編譯

    關(guān)閉防火墻及核心防護

    [root@slaver1 ~]# iptables -F [root@slaver1 ~]# setenforce 0

    下面編譯在已經(jīng)部署號的mysql服務(wù)下(mysql5.7版本)

    ps:時間每臺服務(wù)時間保持一致

    為了方便更改一下主機名

    [root@localhost ~]# hostnamectl set-hostname master [root@localhost ~]# su [root@maser ~]#

    開啟二進制日志文件及中繼日志

    [root@localhost ~]# vim /etc/my.cnf server-id = 1 主機身份 log-bin=master-bin 開啟二進制日志 log-slave-updates=true 允許中繼日志尋找二進制文件

    開啟服務(wù)

    [root@localhost ~]# systemctl restart mysqld

    查看一下日志文件是否生成

    [root@localhost ~]# ls /usr/local/mysql/data/ auto.cnf ibdata1 ib_logfile1 master-bin.000001 master-bin.index pe

    進程mysql數(shù)據(jù)庫創(chuàng)建權(quán)限賬戶

    [root@slave02 ~]# mysql -uroot -p grant replication slave on *.* to 'myslave'@'192.168.136.%' identified by '123456'; 創(chuàng)建權(quán)限賬戶允許salve來matser讀取數(shù)據(jù) mysql> flush privileges; 刷新 Query OK, 0 rows affected (0.00 sec)

    檢查從服務(wù)器位置

    775定位你日志的位置(注意;后面需要定位這里)

    mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000001 | 775 | | | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)

    部署第一臺從服務(wù)器

    開啟二進制日志文件及中繼日志

    [root@slave01 ~]# vim /etc/my.cnf server-id = 22 relay-log=relay-log-bin 從主服務(wù)器上同步日志到本地 relay-log-index=slave-relay-bin.index 定義relay-log的位置和名稱 [root@slaver1 ~]# systemctl restart mysqld

    配置連接主服務(wù)器同步
    注意這里pos是定義你的日志位置就是上面的775

    mysql> change master to master_host='192.168.136.88',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=775; Query OK, 0 rows affected, 2 warnings (0.02 sec) mysql> start slave; 開啟功能

    查看是否同步

    mysql> show slave status\G *************************** 1. row ***************************Slave_IO_Running: Yes I/O線程同步日志Slave_SQL_Running: Yes SQI讀取中繼日志存入數(shù)據(jù)庫

    部署第2臺從服務(wù)器配置

    開啟二進制日志文件及中繼日志

    [root@slave01 ~]# vim /etc/my.cnf server-id = 33 relay-log=relay-log-bin relay-log-index=slave-relay-bin.index [root@slaver2 ~]# systemctl restart mysqld

    配置連接主服務(wù)器同步

    [root@slaver2 ~]# mysql -uroot -p mysql> change master to master_host='192.168.136.88',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=775; mysql> start slave; 開啟配置

    查看是否同步

    mysql> show slave status\G *************************** 1. row ***************************Slave_IO_Running: Yes I/O線程同步日志Slave_SQL_Running: Yes SQI讀取中繼日志存入數(shù)據(jù)庫

    實驗查了是否同步
    在主服務(wù)器創(chuàng)建文件及內(nèi)容

    mysql> creste database scholl mysql> create tabel info (id int(4,name char(10));mysql> insert into info values (1,'zhangsan'),(2,'lisi'); mysql> select * from info; +------+----------+ | id | name | +------+----------+ | 1 | zhangsan | | 2 | lisi | +------+----------+

    配置讀寫分離關(guān)鍵服務(wù)

    配置amoeba服務(wù)

    安裝環(huán)境
    amoeba是由jdk編寫的所以需要環(huán)境
    jdk-6u14-linux-x64.bin導(dǎo)入amoeba包

    [root@localhost opt]# cp jdk-6u14-linux-x64.bin /usr/local/ [root@localhost opt]# cd /usr/local/ [root@localhost local]# chmod +x jdk-6u14-linux-x64.bin 給予權(quán)限

    連接并安裝jdk

    ./jdk-6u14-linux-x64.bin yes 是否同意安裝 Press Enter to continue..... 回車 稍微等一會Done.

    修改一下文件名稱

    [root@localhost local]# mv jdk1.6.0_14/ jdk1.6

    配置環(huán)境變量
    末尾插入

    [root@localhost local]# vim /etc/profile export JAVA_HOME=/usr/local/jdk1.6 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin export AMOEBA_HOME=/usr/local/amoeba export PATH=$PATH:$SAMOEBA_HOME/bin [root@localhost local]# source /etc/profile 立即生效

    創(chuàng)建amoeba家目錄

    [root@localhost local]# mkdir /usr/local/amoeba

    解壓amoeba到創(chuàng)建的目錄中

    [root@localhost opt]# tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

    遞歸給予amoeba所有文件權(quán)限

    [root@localhost local]# chmod -R 755 /usr/local/amoeba/

    查看是否安裝成功

    **[root@localhost local]# /usr/local/amoeba/bin/amoeba amoeba start|stop 說明安裝成功**

    在三臺mysql主從服務(wù)器上添加權(quán)限開放給amoeba訪問 不在演示

    mysql> grant all on *.* to test@'192.168.136.%' identified by '123.com'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; 刷新

    定義具體的讀寫分離對象

    配置amoeba的主配置文件amoeba.xml

    下面是客戶端訪問amoeba的賬戶并申明變量名
    配密碼

    vim /usr/local/amoeba/conf/amoeba.xml修改第30、32行(客戶端訪問amoeba時的用戶):30 <property name="user">amoeba</property> ## 將root替換為amoeba32 <property name="password">123456</property> ## 密碼Wie123456修改將117、120行,將注釋符去掉,并修改115、118、119行:

    1:開啟池子
    117去掉注釋掉

    2:配置池子內(nèi)容(讀master寫salves)

    115 <property name="defaultPool">master</property> 118 <property name="writePool">master</property> 119 <property name="readPool">salves</property>

    配置訪問amoeba密碼

    [root@localhost conf]# cd /usr/local/amoeba/conf/ [root@localhost conf]# vim dbServers.xml 配置數(shù)據(jù)庫 訪問數(shù)據(jù)庫的密碼 28-29 注釋掉25 <!-- mysql user --> 26 <property name="user">test</property>27 28 <!-- mysql password -->29 <property name="password">123.com</property>

    配置各節(jié)點的IP地址

    主服務(wù)45 <dbServer name="master" parent="abstractServer">48 <property name="ipAddress">192.168.136.88</property> 從服務(wù)器1 52 <dbServer name="slave1" parent="abstractServer">55 <property name="ipAddress">192.168.136.40</property> 從服務(wù)器2(復(fù)制上面的6行在下面粘貼)59 <dbServer name="slave2" parent="abstractServer">62 <property name="ipAddress">192.168.136.77</property>末尾 修改66 <dbServer name="slaves" virtual="true">72 <property name="poolNames">slave1,slave2</property>

    后臺啟動

    [root@localhost conf]# /usr/local/amoeba/bin/amoeba start & 后臺啟動

    打開一臺新的linux服務(wù)器

    [root@localhost ~]# setenforce 0 [root@localhost ~]# iptables -F [root@localhost ~]# yum -y install mysql [root@localhost ~]# mysql -u amoeba -h 192.168.136.10 -P8066

    測試客戶端

    • 連接amoeba
    • 發(fā)現(xiàn)報錯找不到數(shù)據(jù)庫
    MySQL [(none)]> show databases; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 2074631480 Current database: *** NONE ***ERROR 2013 (HY000): Lost connection to MySQL server during query MySQL [(none)]>

    解決方法!!!
    把text改成mysql

    [root@localhost ~]# cd /usr/local/amoeba/conf/ [root@localhost conf]# vim dbServers.xml 22 <!-- mysql schema -->23 <property name="schema">mysql</property>

    ps: Amoeba數(shù)據(jù)庫5.5中 23行 默認有text數(shù)據(jù)庫 而數(shù)據(jù)庫5.7中 23行 默認沒有text數(shù)據(jù)庫所有需要指定一個已有的數(shù)據(jù)庫

    解決了查看一下數(shù)據(jù)庫,里面有了我們在主配置文件寫的school文件

    MySQL [(none)]> show databases; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 1625168778 Current database: *** NONE ***+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | school | | sys | +--------------------+ 5 rows in set (0.11 sec)

    測試遠程amoeba連接并查看服務(wù)
    重新找一臺Linux服務(wù)器

    [root@localhost ~]# yum -y install mysql 安裝myslq服務(wù) [root@localhost ~]# mysql -u amoeba -h 192.168.136.10 -P8066 遠程連接amoeba服務(wù)器

    查看一下數(shù)據(jù)庫

    MySQL [(none)]> show databases; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 1625168778 Current database: *** NONE ***+--------------------+ | Database | +--------------------+ | in**加粗樣式**formation_schema | | mysql | | performance_schema | | school | | sys | +--------------------+ 5 rows in set (0.11 sec)

    完成

    測試讀寫分離

    關(guān)閉2臺從服務(wù)器同步功能

    [root@localhost ~]# mysql -uroot -p mysql> stop slave; mysql> show slave status\G 服務(wù)已經(jīng)關(guān)閉Slave_IO_Running: NoSlave_SQL_Running: No

    在從服務(wù)器插入信息

    mysql> insert into info values (3,'wangwu'); 從服務(wù)器1 mysql> insert into info values (2,'lisi'); 從服務(wù)器2

    在客戶端查看(輪詢式查看)

    MySQL [school]> select * from info; +------+----------+ | id | name | +------+----------+ | 1 | zhangsan | | 2 | lisi | | 3 | wangwu | +------+----------+ 3 rows in set (0.01 sec)MySQL [school]> select * from info; +------+----------+ | id | name | +------+----------+ | 1 | zhangsan | | 2 | lisi | +------+----------+ 2 rows in set (0.00 sec)

    在生產(chǎn)環(huán)境中開啟同步功能,服務(wù)端讀的信息是一樣的,寫數(shù)據(jù)只往主服務(wù)器寫,不會往從服務(wù)器寫,所有用戶查詢只在從服務(wù)器上進行,所以從服務(wù)器的并發(fā)大,主服務(wù)器配置不高

    總結(jié)

    以上是生活随笔為你收集整理的mysql5.7主从同步与读写分离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。