目錄
1-2-1、配置mysql主從同步結構(一主(192.168.4.51)、一從(192.168.4.52)):
1-4、在代理服務器192.168.4.53主機上測試授權用戶
1-5、在代理服務器192.168.4.53主機上啓動maxscale服務
1-6、客戶端192.168.4.50來訪問代理服務並以主從複製結構數據庫授權的用戶名和密碼來對所授權的庫裏的表進行讀寫操作,查看是否實現了讀寫分離。
2、mysql多實例:在一臺虛擬機上運行多個mysql數據庫服務
2-6、創建相關的目錄、初始化數據庫、啓動數據庫、臨時密碼登陸、修改新密碼
3-3、存儲設備:磁盤轉速不低於15000/s,最好是固態盤,查看I/O
3-11、程序員編寫的sql查詢命令太複雜,導致數據庫服務器處理慢。
1-1、mysql數據讀寫分離介紹:
mysql數據讀寫分離:把客戶端查詢數據庫的請求和寫入數據的請求,分別轉給不同的數據庫服務器來處理。
mysql數據讀寫分離結構的目的:減輕主庫的併發訪問壓力,提高從庫的硬件利用率。
部署實現mysql數據讀寫分離服務:mysql中間件(比如mycat、mysql-proxy、maxscale)
1-2、配置mysql數據讀寫分離服務:
1-2-1、配置mysql主從同步結構(一主(192.168.4.51)、一從(192.168.4.52)):
1-2-1-1、對指定庫的異地同步
同步子前,需要將主庫的所有數據完全備份後再在從庫上完全恢復數據,先保證主從庫數據的一致.
1-2-1-2、mysql主-->從複製架構的實現
主master庫(192.168.4.51)配置如下:
(1)、啓用binglog日誌文件
[mysqld]
server_id=51
log-bin=master51
binlog_format="mixed"
(2)、用戶授權:給從庫添加連接時使用的用戶名
grant replication slave on *.* to repluser@"192.168.4.52" identified by "123qqq...A";
(3)、查看正在使用的binglog日誌信息
show master status;
1-2-1-3、從slave庫(192.168.4.52)配置如下:
(1)、指定server_id
[mysqld]
server_id=52
systemctl restart mysqld
(2)、測試授權用戶:mysql -uroot -p123456----先用本機帳號登陸
show slave status\G;---查詢從庫狀態信息
Empty set (0.00 sec)---將會顯示爲空
(3)、管理本機登陸指定主庫信息
change master to master_host="192.168.4.51",master_user="repluser",master_password="123qqq...A",
master_log_file="master51.000001",master_log_pos=750;
start slave;
(4)、查看配置
show slave status\G;---重新查詢從庫狀態信
1-2-1-4、在主庫上管理員本機登陸,創建庫和表,並且授權客戶端連接本機數據庫的用戶名和密碼:
create database testdb;
create table testdb.t1(id int);
insert into testdb.t1 values(11);
grant select,insert on testdb.* to yaya99@"%" identified by "123qqq...A";
1-2-1-4、客戶端連接主庫數據庫,select和insert
1-2-1-5、從庫本機登陸,select查看一下是否已同步
1-2-2、代理服務器安裝maxscale軟件
2-2-1、代理服務器(192.168.4.53)上的操作:
yum -y install maxscale-2.1.2-1.rhel.7.x86_64.rpm----安裝maxscale軟件
rpm -qa | grep -i maxscale-----查看是否安裝成功
rpm -qc maxscale------查看配置文件有哪些
cp /etc/maxscale.cnf /etc/maxscale.cnf.bak---複製一份配置文件,以防誤操作
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2-2-2、/vim /etc/maxscale.cnf
[maxscale]
10 threads=auto---線程數根據cpu核數自動設置
定義server1關聯的主機的相關信息
18 [server1]
19 type=server
20 address=192.168.4.51---指定訪問的主機
21 port=3306-----指定訪問的主機的端口
定義server2關聯的主機的相關信息
23 [server2]
24 type=server
25 address=192.168.4.52
26 port=3306
27 protocol=MySQLBackend
相關的監控信息,監控的用戶需要對後端數據庫有訪問replication client的權限
[MySQL Monitor]
36 type=monitor----類型爲監視類型
37 module=mysqlmon-----監視模塊名
38 servers=server1, server2---監視的數據庫服務器(監控數據庫服務的狀態信息和主從同步的狀態)注意server1,空格server2
39 user=scalemon----監視主從複製結構數據庫狀態信息及主從同步狀態時用來連接數據庫的用戶名,
40 passwd=123qqq...A---監視主從複製結構數據庫狀態信息及主從同步狀態時用來連接數據庫的密碼,用戶名和密碼需要在主庫上授權
41 monitor_interval=10000----單位爲毫秒,即每10000毫秒監視一次
detect_replication_lag=true #監控主從同步狀態和信息
detect_stale_master=true #監控主從複製 slave全部掛掉時,所有訪問全部指向master
注意:註釋掉下面這段
##############################################################
52 #[Read-Only Service]
53 #type=service
54 #router=readconnroute
55 #servers=server1
56 #user=myuser
57 #passwd=mypwd
58 #router_options=slave
###############################################################
定義讀寫分離在哪些服務器上操作:
63 [Read-Write Service]----讀寫分離,用戶需要有select on mysql.db;select on myslq.tables_priv;select on mysql.columns_priv的權限,然後才能知道客戶端連接代理服務器的用戶名和密碼有沒有被主從數據庫授權。
64 type=service
65 router=readwritesplit---路由讀和寫
66 servers=server1, server2----連接的數據庫主機
67 user=maxscale----連接數據庫主機select on mysql.*時被授權的用戶名
68 passwd=123qqq...A----連接數據庫主機select on mysql.*時被授權的密碼
69 max_slave_connections=100%
定義管理服務:
75 [MaxAdmin Service]
76 type=service
77 router=cli---在命令行管理
注意:註釋掉下面這段
##############################################################
85 #[Read-Only Listener]
86 #type=listener
87 #service=Read-Only Service
88 #protocol=MySQLClient
89 #port=4008
##############################################################
管理讀寫分離服務:
91 [Read-Write Listener]
92 type=listener
93 service=Read-Write Service----讀寫分離服務在Read-Write Service上進行來實現
94 protocol=MySQLClient
95 port=4006----讀寫分離服務使用的端口號
管理讀寫分離服務:
97 [MaxAdmin Listener]
98 type=listener
99 service=MaxAdmin Service----管理讀寫分離服務在MaxAdmin Service上進行
100 protocol=maxscaled
101 socket=default
102 port=4016---附加的自定義的端口號,不自定義則從1024----65536隨即選擇
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1-3、主庫授權:
grant replication slave,replication client on *.* to scalemon@"%" identified by "123qqq...A";
REPLICATION CLIENT 使得用戶可以使用SHOW MASTER STATUS和SHOW SLAVE STATUS命令,也就是說這個權限是用於授予賬戶監視Replication狀況的權力。
REPLICATION SLAVE則是一個必須而基本的權限,它直接授予slave服務器以該賬戶連接master後可以執行replicate操作的權利。
grant select on mysql.* to maxscale@"%" identified by "123qqq...A";
select user from mysql.user where user in ("scalemon","maxscale");-----主從庫上查看一下來確定已授權成功
1-4、在代理服務器192.168.4.53主機上測試授權用戶
]# which mysql----查看有沒有mysql客戶端軟件
]# yum -y install mariadb----如沒有則安裝
]# mysql -h192.168.4.51 -uscalemon -p123qqq...A
]# mysql -h192.168.4.52 -uscalemon -p123qqq...A
]# mysql -h192.168.4.51 -umaxscale -p123qqq...A
]# mysql -h192.168.4.52 -umaxscale -p123qqq...A
1-5、在代理服務器192.168.4.53主機上啓動maxscale服務
maxscale -f /etc/maxscale.cnf------起服務
pkill -9 maxscale-----若需要停服務用此命令
netstat -utnlp | grep -i maxscale-----查看進程
tcp LISTEN 0 128 :::4016 :::* users:(("maxscale",pid=3084,fd=12))
tcp LISTEN 0 128 :::4006 :::* users:(("maxscale",pid=3084,fd=11))
maxadmin -uadmin -pmariadb -P4016------在192.168.4.53本機訪問管理服務,查看監控信息
MaxScale> list servers----列出所監控的server主機的信息
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.4.51 | 3306 | 1 | Master, Running
server2 | 192.168.4.52 | 3306 | 1 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
1-6、客戶端192.168.4.50來訪問代理服務並以主從複製結構數據庫授權的用戶名和密碼來對所授權的庫裏的表進行讀寫操作,查看是否實現了讀寫分離。
mysql -h192.168.4.53 -P4006 -uyaya99 -p"123qqq...A"----這裏-P一定要跟的是讀寫分離服務的端口號,負責將無法實現讀寫分離服務,因爲只有該端口定義了讀寫分離功能。
2、mysql多實例:在一臺虛擬機上運行多個mysql數據庫服務
配置多實例的操作如下:
2-1、檢查環境
rpm -qa | grep -i mysql---先查看主機上是否已安裝mysql服務
systemctl stop mysqld-----停止服務
systemctl disable mysqld-----不要開機自啓
2-2、安裝多實例
下載 mysql-5.7.20-linux-glibc2.12x86_64.tar.gz多實例軟件包
tar -xf mysql-5.7.20-linux-glibc2.12x86_64.tar.gz
mv mysql-5.7.20-linux-glibc2.12x86_64 /usr/local/mysql---將解壓好的多實例軟件包放到/usr/local/下
並重新命名爲mysql
2-3、修改全局變量
vim /etc/profile
export PATH=/usr/local/mysql/bin:$PATH ----添加執行文件路徑的變量:$PATH,此外多實例軟件mysql-5.7.20-linux-glibc2.12x86_64下的bin目錄裏存放了其所有的命令,做次步只是爲了以後啓用命令時不寫命令的絕對路徑
:wq
echo $PATH------查看是否添加執行文件路徑的變量:$PATH成功
2-4、備份主配置文件
mv /etc/my.cnf /etc/my.cnf.bak------做此步是爲了以後恢復數據庫有數據庫主配置文件
2-5、修改配置文件
vim /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = root
[mysqld1]
port = 3307
datadir = /data3307
socket = /data3307/mysql.sock
pid-file = /data3307/mysqld.pid
log-error = /data3307/mysqld.err
[mysqld2]
port = 3308
datadir = /data3308
socket = /data3308/mysql.sock
pid-file = /data3308/mysqld.pid
log-error = /data3308/mysqld.err
[mysqld3]
port = 3309
datadir = /data3309
socket = /data3309/mysql.sock
pid-file = /data3309/mysqld.pid
log-error = /data3309/mysqld.err
2-6、創建相關的目錄、初始化數據庫、啓動數據庫、臨時密碼登陸、修改新密碼
mkdir /data3307 mkdir /data3308 mkdir /data3309
mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3309 --initialize---初始化數據庫
ls /data3309----會出現一部分文件:
[root@host50 ~]# ls /data3309/
auto.cnf ibdata1 ib_logfile1 performance_schema
ib_buffer_pool ib_logfile0 mysql sys
mysqld_multi start 3----啓動服務
ls /data3309--又會多出來一些文件:
[root@host50 ~]# ls /data3309
auto.cnf ib_logfile0 mysql mysql.sock sys
ib_buffer_pool ib_logfile1 mysqld.err mysql.sock.lock
ibdata1 ibtmp1 mysqld.pid performance_schema
ss -utnlp | grep 3309----檢查服務是否確實已經啓動
mysqld_multi --user=root --password="123456" stop 3-----停止服務
ss -utnlp | grep 3309----檢查服務是否確實已經停止
mysql -uroot -p'Jl>!lL%2piN5' -S /data3309/mysql.sock---初次使用臨時密碼登陸
alter user user() identified by "123456"----改密碼------user()是一個變量,等同於root@localhost
quit
mysql -uroot -p123456 -S /data3309/mysql.sock---新密碼登
3、mysql性能調優:
軟調優:優化
硬調優:優化相關硬件
3-1、cpu方面的:
[root@host51 ~]# top
top - 10:35:47 up 1:18, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 114 total, 1 running, 113 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.3 si, 0.3 st
KiB Mem : 1016260 total, 440544 free, 301600 used, 274116 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 548708 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2093 root 20 0 157696 2176 1524 R 0.3 0.2 0:00.01 top
1 root 20 0 125384 3976 2508 S 0.0 0.4 0:01.02 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
[root@host51 ~]# uptime
10:30:25 up 1:12, 1 user, load average: 0.00(一分鐘的平均負載), 0.01(五分鐘的平均負載), 0.05(15分鐘的平均負載)
3-2、內存方面的:
[root@host51 ~]# free -m
total used free shared buff/cache available
Mem: 992 294 430 7 267 536
Swap: 2047 0 2047
3-3、存儲設備:磁盤轉速不低於15000/s,最好是固態盤,查看I/O
數據庫服務軟件版本太低,導致性能低下。
3-4、查看數據庫服務運行時的運行參數(查看變量)
show variables;
show variables like "";
3-5、影響數據庫服務性能的值:
show variables like "%conn%";
併發連接數量: max_connections | 151----可手動設置
show global status like "%conn%";
3-6、連接超時時間:
客戶端與服務器建立連接時,
show variables like "%time%";
connect_timeout | 10 -----建立連接時,3次握手的超時時間,超過連接時間後,強制斷開連接請求
wait_timeout | 28800-----連接建立後,服務器等待客戶輸入sql命令的超時時間
3-7、可以重複使用的線程數量:
show variables like "%thread%";
thread_cache_size | 9 ----不論有沒有客戶端來連接,都始終開9個線程來以備快速建立連接。不能設置太大,太大的話會浪費系統資源,太小會降低客戶端連接速度
3-8、可以打開的表的數量的限制
show variables like "%table%";
table_open_cache | 2000----可以打開的表的數量的限制
3-9、緩存的設置:
mysql服務體系結構:
管理工具:軟件安裝後提供的管理命令-----比如mysql mysqldump mysqlbinlog mysqladmin
連接池:檢查服務器是否有資源響應客戶端的連接請求
SQL接口:把sql命令傳遞給mysql程序
分析器:檢查用戶執行的sql命令是否正確
優化器:對執行的sql命令做優化
查詢緩存:存儲曾經查找到的查詢結果(存儲空間是mysql服務啓動時從主機的物理內存裏劃分出來的)
存儲引擎:表的處理器,不同的存儲引擎支持不同的功能和數據存儲方式,mysql innodb
文件系統:數據服務用來存儲數據的硬盤。
mysql服務處理查詢請求的過程:
查詢緩存:
show variables like "%cache%";
show variables like "query_cache_%";
query_cache_wlock_invalidate | OFF----查詢緩存寫鎖有效---當客戶端查詢myisam存儲引擎的表時,若此時有客戶端對錶執行寫操作的話,數據庫服務不好從查詢緩存裏查找結果返回給客戶端,而是等寫操作完成後,重新從表裏查詢結果返還給客戶端。
query_cache_min_res_unit | 4096----查詢緩存的最小存儲單元4k,存儲單元太小不會浪費存儲空間,但會浪費系統資源。
query_cache_type | OFF-----0(off)--不開啓查詢緩存功能,---1----若查詢結果沒有超出查詢緩存數據大小的限制,則會繼續將查詢結果放入查詢緩存中,超過限制則不再存儲---2---明確指定將查詢結果放到查詢緩存中,並且沒有緩存數據大小的限制。
3-10、查看查詢緩存統計信息:
show global status like "qcache%"
Qcache_hits | 0 ---- 當查詢結果是在查詢緩存裏找到的,此變量值自動加一
Qcache_inserts | 0 -----在查詢緩存裏查找一次數據,不管能不能找到,此變量值自動加一
Qcache_hits/Qcache_inserts----在查詢緩存中查到數據的命中率。
索引緩存:
show variables like "%key%";
key_buffer_size | 8388608----存放索引緩存的空間大小,這裏設置的爲8MB
explain select * from 表名;-----可以列出查找過程信息,可以看到查詢時是否使用索引
show variables like "%buffer%";
read_buffer_size | 131072-----爲順序讀取表記錄保留的緩存大小,增大此值可以提高讀取速度
sort_buffer_size | 262144 -----增大此值可以提高order和group的速度
3-11、程序員編寫的sql查詢命令太複雜,導致數據庫服務器處理慢。
mysql服務日誌的類型有四種:
錯誤日誌---
binlog日誌---記錄所有的寫操作的sql命令
慢查詢日誌---
查詢日誌----記錄執行的所有sql命令,默認沒有啓用。
vim /etc/my.cnf
[mysqld]
general-log
wq:
systemctl restart mysqld----就開啓了查詢日誌
慢查詢日誌---記錄超過了超時時間才顯示查詢結果的sql命令,默認沒有啓用,默認超時時間是10s。---記錄此類執行起來太慢的sql命令,進行調優
vim /etc/my.cnf
[mysqld]
slow-query-log
wq:
systemctl restart mysqld----就開啓了慢查詢日誌
select sleep(11),user from mysql.user limit 2;----在查詢每一行之前睡11秒
感謝您的拜讀!!!,喜歡請點贊!