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

歡迎訪問 生活随笔!

生活随笔

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

数据库

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

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

讀寫分離

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

Mysql主從復制的過程

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


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

讀寫分離原理

  • 只在主服務器上寫,只在從服務器上讀

  • 主數據庫處理事務查詢,從數據庫處理select查詢

  • 數據庫復制用于將事務性查詢的變更同步到集群中的從數據庫

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

讀寫分離方案

  • 基于程序代碼內部實現
  • 基于中間代理層實現
  • Amoeba

編寫環(huán)境

4臺服務器每臺服務器都裝有Mysql服務

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

    主服務編譯

    關閉防火墻及核心防護

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

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

    ps:時間每臺服務時間保持一致

    為了方便更改一下主機名

    [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 允許中繼日志尋找二進制文件

    開啟服務

    [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數據庫創(chuàng)建權限賬戶

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

    檢查從服務器位置

    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)

    部署第一臺從服務器

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

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

    配置連接主服務器同步
    注意這里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讀取中繼日志存入數據庫

    部署第2臺從服務器配置

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

    [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

    配置連接主服務器同步

    [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讀取中繼日志存入數據庫

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

    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 | +------+----------+

    配置讀寫分離關鍵服務

    配置amoeba服務

    安裝環(huán)境
    amoeba是由jdk編寫的所以需要環(huán)境
    jdk-6u14-linux-x64.bin導入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 給予權限

    連接并安裝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所有文件權限

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

    查看是否安裝成功

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

    在三臺mysql主從服務器上添加權限開放給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:配置池子內容(讀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 配置數據庫 訪問數據庫的密碼 28-29 注釋掉25 <!-- mysql user --> 26 <property name="user">test</property>27 28 <!-- mysql password -->29 <property name="password">123.com</property>

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

    主服務45 <dbServer name="master" parent="abstractServer">48 <property name="ipAddress">192.168.136.88</property> 從服務器1 52 <dbServer name="slave1" parent="abstractServer">55 <property name="ipAddress">192.168.136.40</property> 從服務器2(復制上面的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服務器

    [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ā)現報錯找不到數據庫
    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數據庫5.5中 23行 默認有text數據庫 而數據庫5.7中 23行 默認沒有text數據庫所有需要指定一個已有的數據庫

    解決了查看一下數據庫,里面有了我們在主配置文件寫的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連接并查看服務
    重新找一臺Linux服務器

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

    查看一下數據庫

    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)

    完成

    測試讀寫分離

    關閉2臺從服務器同步功能

    [root@localhost ~]# mysql -uroot -p mysql> stop slave; mysql> show slave status\G 服務已經關閉Slave_IO_Running: NoSlave_SQL_Running: No

    在從服務器插入信息

    mysql> insert into info values (3,'wangwu'); 從服務器1 mysql> insert into info values (2,'lisi'); 從服務器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)

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

    總結

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

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