1. 程式人生 > >主從同步、讀寫分離、mysql效能調優(軟優化)

主從同步、讀寫分離、mysql效能調優(軟優化)

 配置mysql主從同步
1 主從同步的作用:讓slave身份的資料庫伺服器自動同步

master身份的資料庫伺服器上的資料。

一、主資料庫伺服器的配置192.168.4.12
1 使用者授權
mysql> grant replication slave on *.* to

[email protected]"192.168.4.11" identified by "123456";
2 啟用binlog日誌
vim /etc/my.cnf
[mysqld]
server_id=12
log_bin=master12
binlog_format="mixed"
:wq
#systemctl stop mysqld
#systemctl start mysqld
#ls /var/lib/mysql/master12.*
#mysql -uroot -p123456
mysql> show master status;

二 、從資料庫伺服器的配置192.168.4.11
1 驗證主庫的授權使用者
#ping 192.168.4.12
#mysql -h192.168.4.12 -uslaveuser -p123456
mysql> show grants;

2 修改配置檔案指定server_id
vim /etc/my.cnf
[mysqld]
server_id=11
:wq

#systemctl stop mysqld
#systemctl start mysqld

3 設定自己是那臺主機的從庫
#mysql -uroot -p123456
mysql> show slave status;
mysql> change master to

master_host="192.168.4.12",
master_user="slaveuser",
master_password="123456",
master_log_file="master12.000001",
master_log_pos=154;
mysql>show slave status\G;
mysql> start slave;
mysql>show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

三測試主從同步配置
客戶端訪問主庫時 產生的資料在從庫上都可以看的到。


從庫暫時不同步主庫的資料
mysql> stop slave;


把從庫恢復為獨立的資料庫伺服器
#rm -rf master.info localhost-relay-bin.* relay-

log.info
#systemctl stop mysqld ; systemctl start mysqld

四、主從同步工作過程
cd /var/lib/mysql/
master.info 連線主庫資訊
localhost-relay-bin.000001 中繼日誌檔案
localhost-relay-bin.index 日誌索引檔案
relay-log.info 中繼日誌資訊

IO執行緒 :負責把主庫binlog裡的sql命令儲存到本機的中繼日

志文件裡。

報錯原因: 連線不上主庫伺服器(ping selinux firewalld

grant binlog日誌指定錯誤)

Last_IO_Error: 報錯資訊

解決錯誤
mysql> stop slave;
mysql> change master to 選項=值,選項=值;
mysql> start slave;

SQL執行緒:執行本機中繼日誌檔案裡的sql命令把資料寫進庫裡


報錯原因:本機沒有執行日誌檔案裡sql命令時,使用的庫或表

Last_SQL_Error: 報錯資訊


解決辦法:讓從庫有主庫比自己多的資料,然後 stop slave ;start slave;
++++++++++++++++++++++++++++++++++
五、主從同步結構
一主一從 *
一主多從 *
主從從
主主結構(互相主從)
++++++++++++++++++++++++++++++++++++
主從同步配置常用引數
vim /etc/my.cnf
/etc/my.cnf
[mysqld]
....
:wq
#systemctl restart mysqld
#mysql>show master status;

主資料伺服器使用的引數
binlog_do_db=db1,db2 只允許同步本機庫1和庫2
binlog_ignore_db=db1,db2 只不允許同步本機庫1和庫2

從資料伺服器使用的引數
log_slave_updates 允許級聯複製(主從從)
replicate_do_db=db1,db2 只同步庫1和庫2
replicate_ignore_db=db1,db2 只不同步庫1和庫2
relay_log=名 指定中繼日誌檔名

五、mysql讀寫分離 (第三方軟體 + 主從同步)
1 什麼讀寫分離:把不同操作給不同的資料庫伺服器處理
2 為什麼要做讀寫分離:減輕伺服器的併發訪問壓力同時提高硬

件利用率。

實現讀寫分離
第三方軟體 :有很多 統稱mysql中介軟體 不同的中介軟體軟體有不

同的功能,大多數都是開源 (mysql-proxy mysql-mmm

mycat maxscale*)

主從同步結構(一主一從 )
要求:把資料庫伺服器11 配置為資料庫伺服器12的從伺服器。

1、配置12
1.1 使用者授權
1.2 啟用binlog日誌

2、配置11
2.1 測試授權使用者
2.2 設定server_id
2.3 管理員帳號登入,設定自己為12的從資料庫伺服器
2.4 檢視IO執行緒和SQL執行緒的狀態

3、在客戶端測試主從同步配置
3.1 在主資料庫伺服器上新增對資料有訪問許可權的使用者
mysql> grant all on bbsdb.* to [email protected]"%"

identified by "123456";
mysql> create database bbsdb;

使用主資料庫伺服器上授權使用者連線主資料庫伺服器,建庫,建

表,連線從資料庫時,也能夠看到新建立的庫和表。
#mysql -h192.168.4.12 -uwebadmin -p123456

3 配置實現讀寫分離功能的伺服器(13)
3.1 能夠和2臺數據庫伺服器通訊
#ping 192.168.4.11/12
3.2 安裝軟體maxscale-2.1.2-1.rhel.7.x86_64.rpm
#rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm(根據提示

安裝依賴包)
#rpm -ql maxscale
#rpm -qc maxscale

3.3 修改配置檔案
# grep -v '#' /etc/maxscale.cnf.template >

/etc/maxscale.cnf

[[email protected] ~]# cat /etc/maxscale.cnf
[maxscale]
threads=1

[server1]
type=server
address=192.168.4.11
port=3306
protocol=MySQLBackend

[server2]
type=server
address=192.168.4.12
port=3306
protocol=MySQLBackend

[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon
passwd=111111
monitor_interval=10000

[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale
passwd=111111
max_slave_connections=100%

[MaxAdmin Service]
type=service
router=cli

[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006

[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4008
[[email protected] ~]#

[maxscale] 定義服務執行時啟動的執行緒數量
[server數字] 定義資料庫伺服器ip地址
[MySQL Monitor] 定義監控成員列表
[Read-Write Service]定義讀寫分離主機列表
[MaxAdmin Service] 定義管理服務
[Read-Write Listener]定義讀寫分離服務使用的埠
[MaxAdmin Listener]定義管理服務使用的埠


根據配置檔案裡設定,在資料庫伺服器上新增對應的授權使用者
mysql>grant replication slave, replication client on *.*

to [email protected]'%' identified by “111111”;

mysql> grant select on mysql.* to [email protected]'%'

identified by "111111";

3.4 啟動服務
# maxscale -h
# maxscale -f /etc/maxscale.cnf
[[email protected] ~]# netstat -utnalp | grep maxscale
tcp 0 0 192.168.4.13:39870 192.168.4.12:3306

ESTABLISHED 12412/maxscale
tcp 0 0 192.168.4.13:32980 192.168.4.11:3306

ESTABLISHED 12412/maxscale
tcp6 0 0 :::4008 :::* LISTEN

12412/maxscale
tcp6 0 0 :::4006 :::* LISTEN

12412/maxscale
[[email protected] ~]#


在本機連線管理埠檢視監控主機的狀態
[[email protected] ~]# maxadmin -P 4008 -pmariadb
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------

+--------------------
Server | Address | Port | Connections |

Status
-------------------+-----------------+-------+-------------

+--------------------
server1 | 192.168.4.11 | 3306 | 0 | Slave,

Running
server2 | 192.168.4.12 | 3306 | 0 | Master,

Running
-------------------+-----------------+-------+-------------

+--------------------
MaxScale> list ser
Unknown or missing option for the list command. Valid

sub-commands are:
clients List all clients
dcbs List all DCBs
filters List all filters
listeners List all listeners
modules List all currently loaded modules
monitors List all monitors
services List all the services
servers List all servers
sessions List all sessions
threads List polling threads
commands List registered commands
MaxScale> quit


4 在客戶端測試讀寫分離
mysql -h192.168.4.13 -P 4006 -uwebadmin -

p123456
mysql> select * from bbsdb.a;
insert insert into bbsdb.a values(1001);

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mysql效能調優(軟優化)
維護的資料庫伺服器響應客戶端請求慢,可能是什麼原因導致的?
1.1網路頻寬窄(使用網路測速軟體)

1.2伺服器硬體配置過低(CPU 記憶體 儲存)
使用命令或監控軟體監視 使用情況 (top free -m )


1.3提供資料庫服務軟體版本低
如何知道是否是軟體版本低,檢視服務執行時的引數資訊
/etc/my.cnf
[mysqld]
變數名=值
:wq

#mysql -uroot -p123456
檢視引數值
mysql> show variables like "%timeout%";
mysql> show variables like "connect_timeout";

修改引數值
mysql> set 變數名=值;
mysql> set global 變數名=值;

mysql> SET GLOBAL connect_timeout=5;

常用變數的設定:
1 併發連線數 max_connections
mysql> show processlist

mysql> show global status like "max_used_connections";

max_used_connections/max_connections=0.85

2建立連線3次握手超時時間
connect_timeout

3 連線建立後,關閉某個不活動連線的超時時間
wait_timeout 28800

4 執行緒數量:允許儲存在快取中被重用的執行緒數量
thread_cache_size

5 為所有執行緒快取的開啟的表的數量
table_open_cache


6 與查詢快取相關的引數

select * from t1; read_buffer_size

select * from t1 where name like "a%"; key_buffer-size
seletct * from t1 group by sex; read_rnd_buffer_siz
seletct * from t1 order by 成績; sort_buffer_size

查詢優化
闡述mysql資料伺服器處理查詢請求的過程?


mysql> show variables like "query_cache%";
query_cache_type=0/1/2

0 不允許存
1 無條件儲存
2 要設定把查詢結果記錄到查詢快取裡才儲存

select in_sql_cache * from t1;

query_cache_wlock_invalidate off
myisam儲存引擎的表


pc1 select name from t1 where name="jim"
name="jim"

pc2 select name from t1 where name="jim";
pc3 update t1 set name="tom" where name="jim";

顯示查詢快取統計資訊
mysql> show global status like "qcache%";
Qcache_hits 30
Qcache_inserts 100
Qcache_lowmem_prunes 10
Qcache_not_cached

1.4 程式設計師訪問資料的sql命令複雜導致處理速度慢
mysql資料庫服務啟用慢查詢日誌 ,記錄客戶端連線後服務後,

超過指定時間顯示查詢結果sql命令。

mysql資料庫服務的日誌型別?
錯誤日誌 binlog日誌 查詢日誌 慢查詢日誌
預設啟用的

vim /etc/my.cnf
[mysqld]
選項
:wq
#systemctl stop mysqld;
#systemctl start mysqld;

錯誤日誌:記錄服務在啟動和執行過程中產生的錯誤資訊
log-error=/var/log/mysqld.log

查詢日誌 :記錄客戶端連線後服務後,執行的所有sql命令。
[mysqld]
general-log


cat /var/lib/mysql/主機名.log

慢查詢日誌:記錄客戶端連線後服務後,超過指定時間顯示查詢結果sql命令。

[mysqld]
slow-query-log

mysql> select sleep(11);
# cat /var/lib/mysql/主機名-slow.log
#mysqldumpslow /var/lib/mysql/主機名-slow.log > /tmp/sql.txt

1.5 網路結構不合理

相關推薦

主從同步分離mysql效能調(優化)

 配置mysql主從同步1 主從同步的作用:讓slave身份的資料庫伺服器自動同步 master身份的資料庫伺服器上的資料。 一、主資料庫伺服器的配置192.168.4.121 使用者授權mysql> grant replication slave on *.* to [email

主從同步分離mysql性能調(優化)

tab ren 主庫 its 使用命令 mysql lee 運行 lte 配置mysql主從同步1 主從同步的作用:讓slave身份的數據庫服務器自動同步 master身份的數據庫服務器上的數據。 一、主數據庫服務器的配置192.168.4.121 用戶授權mysql&g

mysql基礎+主從復制分離高可用原理

mysql基礎1)創建數據庫 create database wpj1105;2)創建數據庫 create database wpj1105;3)判斷是否存在庫 : drop database if exists wpj1105;4)使用該數據庫

使用Mycat實現MySQL的分庫分表分離主從切換

Mycat 分庫分表 讀寫分離 主從切換 Mycat及MySQL實例部署情況:Mycat:IP:10.20.8.57,Port:3310/3311MySQL :db1-M1,IP:10.20.8.126,Port:3306db1-M2,IP:10.20.8.126,Port:3307db2-M

Amoeba搭建高可用Mysql集群(實現Mysql主從復制分離負載均衡)

proc 分布式數據庫 啟動 parent 分布 技術分享 事務 admin str Amoeba是什麽? Amoeba(變形蟲)項目,該開源框架於2008年 開始發布一款 Amoeba for Mysql軟件。這個軟件致力於MySQL的分布式數據庫前端代理層,它主要在應用

JAVAEE——宜立方商城13:Mycat數據庫分片主從復制分離100%Linux中成功安裝Mysql的方法

server structure chang exe under have 重新啟動 switch option 1 海量數據的存儲問題 如今隨著互聯網的發展,數據的量級也是撐指數的增長,從GB到TB到PB。對數據的各種操作也是愈加的困難,傳統的關系性數據庫已經無法滿足快速

使用Mycat實現Mysql資料庫的主從複製分離分表分庫負載均衡和高可用

Mysql叢集搭建 使用Mycat實現Mysql資料庫的主從複製、讀寫分離、分表分庫、負載均衡和高可用(Haproxy+keepalived),總體架構:   說明:資料庫的訪問通過keepalived的虛擬IP訪問HAProxy負載均衡器,實現HAProxy的高可用,HAProxy用於實

mysql主從複製分離分庫分表分片

第1章 引言 隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。 水平切分資料庫:可

CentOS7,MySQL主從配置和分離MySQL主從分離分散式資料庫分離主從配置)

一、實驗目標搭建兩臺MySQL伺服器,一臺作為主伺服器,一臺作為從伺服器,主伺服器進行寫操作,從伺服器進行讀操作。二、測試環境主資料庫: CentOS7, MySQL15.1 , 192.168.1.233從資料庫: CentOS7, MySQL15.1 , 192.168.

Mycat實現MySQL的分庫分表分離主從切換

mysql> show tables;+--------------+| Tables in db |+--------------+| t1           |+--------------+1 row in set (0.00 sec)mysql> desc t1;+---------+-

MySQL主從同步分離

修改配置 monit 相關 流量 修改配置文件 l數據庫 cli 授權 san MySQL主從同步MySQL AB復制1.對指定庫的異地同步。2.MySQL主-->從復制架構的實現。3.MySQL服務器的只讀控制。 主從:單向復制時,建議將從庫設置為只讀。 主從復制

【純幹貨】Amoeba實現MySQL主從同步分離

exec strong arc all abstract a star status utf prop 【純幹貨】Amoeba實現MySQL主從同步與讀寫分離 一、簡介 amoeba簡介 Amoeba(變形蟲)項目,該開源框架於2008年開始發布一款 Amoeba f

部署MongoDB復制集(主從復制分離高可用)

rest 讀取 讀寫分離 分享圖片 pro vim 文件 () 同步數據 MongoDB 復制集 復制集(Replica Sets)是額外的數據副本,是跨多個服務器同步數據的過程,復制集提供了冗余備份並提高了數據的可用性,通過復制集可以對硬件故障和中斷的服務進行恢復。

Redis 主從複製分離高可用(七)-part 1

Redis主機資料更新後根據配置和策略,自動同步到備機的master/slaver機制,Master以寫為主,Slave以讀為主,這樣就可以減輕伺服器的壓力了。 redis主從複製之配置介紹 複製的原理介紹 slave啟動成功連線到master後會傳送一個sync命

mysql主從同步分離

mysql主從同步 作用: 可以對指定的資料庫進行異地同步 可以實現主從複製架構 可以對指定伺服器的只讀控制 同步原理   master slave  啟用兩個執行緒

資料庫水平切分的實現原理—分庫分表分離負載均衡主從複製

水平切分資料庫的目的 其主要目的是為突破單節點資料庫伺服器的 I/O 能力限制,解決資料庫擴充套件性問題  通過一系列的切分規則將資料水平分佈到不同的DB或table中,在通過相應的DB路由或者table路由規則找到需要查詢的具體的DB或者table,以進行Query操作

Redis哨兵模式(sentinel)學習總結及部署記錄(主從複製分離主從切換)

Redis的叢集方案大致有三種:1)redis cluster叢集方案;2)master/slave主從方案;3)哨兵模式來進行主

Redis主從同步分離設定

本文介紹使用Redis的主從同步功能(master, slave),使程式實現讀寫分離,避免io瓶頸,提高資料讀寫效率。 Redis支援一個master伺服器對多個slave伺服器同步,同步使用釋出/訂閱機制。 1個master對多個slave,還可以進行分

mariadb的主從同步分離

         資料庫的優化設計對以後web專案能否承擔高併發所帶來的巨大負擔是個非常好的解決方案。主從同步和讀寫分離就是個常用的方法,主資料庫用來寫入資料,從資料庫用來查詢,分擔了主資料庫的一大部分工作,這樣做的好處是當主伺服器崩了之後,還是在從伺服器上獲取到資料,起到

快取架構之19:對專案的redis cluster實驗多master寫入分離高可用性

redis cluster搭建起來了redis cluster,提供了多個master,資料可以分散式儲存在多個master上; 每個master都帶著slave,自動就做讀寫分離; 每個master如果故障,那麼久會自動將slave切換成master,高可用redis cluster的基本功能,來測試一下1