mysql5.7主从同步与读写分离
讀寫分離
- Mysql主從復制的過程
- 讀寫分離原理
- 配置主從同步
- 主服務編譯
- 部署第一臺從服務器
- 部署第2臺從服務器配置
- 配置讀寫分離關鍵服務
- 定義具體的讀寫分離對象
- 配置amoeba的主配置文件amoeba.xml
- 測試客戶端
- 測試讀寫分離
Mysql主從復制的過程
- 開啟二進制日志文件
- I/O線程同步日志
- SQI讀取中繼日志存入數據庫
數據MySQL、主數據更新寫入bing log 日志(二進制日志),通過l/o線程寫入mysql從到relay log(中繼日志)中,通過sql線程讀取中繼日志進行數據更新刪除
讀寫分離原理
-
只在主服務器上寫,只在從服務器上讀
-
主數據庫處理事務查詢,從數據庫處理select查詢
-
數據庫復制用于將事務性查詢的變更同步到集群中的從數據庫
需要創建的三種賬戶:
1.master要創建權限賬戶(主從復制賬戶),允許slave能夠讀取進行復制
2.創建(讀寫分離賬戶),在讀、寫的每一臺服務器上都要有
3.客戶端訪問Amoeba的賬戶,此賬號和數據庫沒關系
讀寫分離方案
- 基于程序代碼內部實現
- 基于中間代理層實現
- Amoeba
編寫環境
4臺服務器每臺服務器都裝有Mysql服務
配置主從同步
主服務編譯
關閉防火墻及核心防護
[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數據庫創建權限賬戶
[root@slave02 ~]# mysql -uroot -p grant replication slave on *.* to 'myslave'@'192.168.136.%' identified by '123456'; 創建權限賬戶允許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> 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讀取中繼日志存入數據庫實驗查了是否同步
在主服務器創建文件及內容
配置讀寫分離關鍵服務
配置amoeba服務
安裝環境
amoeba是由jdk編寫的所以需要環境
jdk-6u14-linux-x64.bin導入amoeba包
連接并安裝jdk
./jdk-6u14-linux-x64.bin yes 是否同意安裝 Press Enter to continue..... 回車 稍微等一會Done.修改一下文件名稱
[root@localhost local]# mv jdk1.6.0_14/ jdk1.6配置環境變量
末尾插入
創建amoeba家目錄
[root@localhost local]# mkdir /usr/local/amoeba解壓amoeba到創建的目錄中
[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的賬戶并申明變量名
配密碼
1:開啟池子
117去掉注釋掉
2:配置池子內容(讀master寫salves)
配置訪問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>配置各節點的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
- 發現報錯找不到數據庫
解決方法!!!
把text改成mysql
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服務器
查看一下數據庫
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)在生產環境中開啟同步功能,服務端讀的信息是一樣的,寫數據只往主服務器寫,不會往從服務器寫,所有用戶查詢只在從服務器上進行,所以從服務器的并發大,主服務器配置不高
總結
以上是生活随笔為你收集整理的mysql5.7主从同步与读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql数据库函数(数字,字符串,日期
- 下一篇: 内存与主板:选对频率,电脑速度飙升