mysql5.7主从同步与读写分离
讀寫分離
- 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ù)編譯
關(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> 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)容
配置讀寫分離關(guān)鍵服務(wù)
配置amoeba服務(wù)
安裝環(huán)境
amoeba是由jdk編寫的所以需要環(huán)境
jdk-6u14-linux-x64.bin導(dǎo)入amoeba包
連接并安裝jdk
./jdk-6u14-linux-x64.bin yes 是否同意安裝 Press Enter to continue..... 回車 稍微等一會Done.修改一下文件名稱
[root@localhost local]# mv jdk1.6.0_14/ jdk1.6配置環(huán)境變量
末尾插入
創(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的賬戶并申明變量名
配密碼
1:開啟池子
117去掉注釋掉
2:配置池子內(nèi)容(讀master寫salves)
配置訪問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ù)庫
解決方法!!!
把text改成mysql
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ù)器
查看一下數(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql数据库函数(数字,字符串,日期
- 下一篇: ERROR 1064 (42000):