cent os搭載mysql讀寫(xiě)分離

數(shù)據(jù)庫(kù)拆分原則

1.優(yōu)先使用緩存來(lái)降低數(shù)據(jù)庫(kù)訪問(wèn)壓力
2.緩存無(wú)法解決問(wèn)題使用數(shù)據(jù)庫(kù)讀寫(xiě)分離
3.讀寫(xiě)分離有瓶頸使用數(shù)據(jù)庫(kù)業(yè)務(wù)垂直拆分,將不同業(yè)務(wù)數(shù)據(jù)分到不同庫(kù)中
4.單表數(shù)據(jù)量過(guò)大使用數(shù)據(jù)庫(kù)水平拆分,盡量控制每個(gè)表的數(shù)據(jù)量在1000萬(wàn)條內(nèi),可以使用取模等算法到相應(yīng)數(shù)據(jù)庫(kù)中找數(shù)據(jù)

運(yùn)用場(chǎng)景

1.當(dāng)數(shù)據(jù)庫(kù)查詢(xún)操作頻繁地時(shí)候,為了減少庫(kù)的壓力將其劃分為主庫(kù)和從庫(kù)集群,將訪問(wèn)壓力平攤到各個(gè)庫(kù)上。
2.在查詢(xún)的時(shí)候往往要建立索引增加查詢(xún)效率,但每次插入數(shù)據(jù)需要更新索引會(huì)影響數(shù)據(jù)庫(kù)寫(xiě)入速度,所以進(jìn)行讀寫(xiě)劃分可以減少主庫(kù)索引提升寫(xiě)入效率的同事提高查詢(xún)速度。
3.但讀寫(xiě)分離只能減少訪問(wèn)壓力,當(dāng)數(shù)據(jù)量暴增時(shí)數(shù)據(jù)庫(kù)的查詢(xún)速度還是很慢,這時(shí)候就需要考慮分庫(kù)分表了。
4.在寫(xiě)入多的情景下,不適用這種情況,因?yàn)閴毫€是在主庫(kù)上
5.主庫(kù)和從庫(kù)之間數(shù)據(jù)的同步有一定延遲,可以在從庫(kù)找不到時(shí)從主庫(kù)找,或者使用延時(shí)
6.盡量不使用分布式事務(wù),有事務(wù)的數(shù)據(jù)盡量都放在同一個(gè)庫(kù)中

準(zhǔn)備工作:安裝并配置centos

1.采用國(guó)內(nèi)的阿里云地址下載速度快http://mirrors.aliyun.com/centos/7/isos/x86_64/

2.虛擬機(jī)中安裝系統(tǒng)

參考博客https://blog.csdn.net/babyxue/article/details/80970526
這里網(wǎng)絡(luò)連接使用橋接模式,讓虛擬機(jī)與主機(jī)的網(wǎng)絡(luò)相互獨(dú)立

3.虛擬機(jī)網(wǎng)絡(luò)配置

由于centos默認(rèn)不開(kāi)啟網(wǎng)卡,所以需要修改配置文件,讓其啟動(dòng)。
參考博客https://blog.csdn.net/jcxch/article/details/48632761

4.配置超級(jí)用戶(hù)權(quán)限

用戶(hù)若沒(méi)有sudo權(quán)限無(wú)法執(zhí)行yum安裝操作,配置過(guò)程參考
https://blog.csdn.net/u010865136/article/details/78062193

至此虛擬機(jī)安裝成功,兩臺(tái)虛擬機(jī)安裝過(guò)程一樣,下面開(kāi)始安裝mysql服務(wù)。

一、分別給兩臺(tái)服務(wù)器安裝mysql(參考https://blog.csdn.net/a774630093/article/details/79270080

1.檢查系統(tǒng)是否裝有mysql

rpm -qa | grep mysql

2.若返回空值,說(shuō)明沒(méi)安裝mysql,需要自己安裝

yum install mysql

3.下載mysql的repo源

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

4.安裝mysql-community-release-el7-5.noarch.rpm包

sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

問(wèn)題:wget command not found
解決:

yum -y install wget

5.安裝mysql

sudo yum install mysql-server

6.重置密碼

mysql -uroot

問(wèn)題:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2),原因是/var/lib/mysql的訪問(wèn)權(quán)限問(wèn)題。下面的命令把/var/lib/mysql的擁有者改為當(dāng)前用戶(hù):

chown root /var/lib/mysql/

7.重啟服務(wù)

service mysqld restart

8.重置登錄密碼

mysql -u root -p
mysql > use mysql;
mysql > update user set password=password('123456') where user='root';
mysql > exit;

9.加入遠(yuǎn)程連接能力,用戶(hù)名為root,密碼為:123456

mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456";  

10.查詢(xún)數(shù)據(jù)庫(kù)編碼格式為utf-8

show variables like "%char%";

如此導(dǎo)入數(shù)據(jù)庫(kù)sql時(shí)要確保sql文件為utf8編碼,進(jìn)入mysql輸入如下命令:

set names utf8;

二、修改防火墻讓端口可讓外部連接

1.開(kāi)放端口讓外部可連接

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

2.Navicat連接數(shù)據(jù)庫(kù)


三、修改數(shù)據(jù)庫(kù)配置文件,配置數(shù)據(jù)庫(kù)主從復(fù)制(參考:https://www.cnblogs.com/zuge/p/6395369.html



1.分別進(jìn)入兩臺(tái)服務(wù)器配置,進(jìn)入配置文件,修改文件內(nèi)容如下(兩臺(tái)server-id設(shè)置不同):

sudo vi /etc/my.cnf

2.重啟mysql服務(wù)

service mysql restart

3.查看配置文件是否生效,看server_id是否相同

show variables like 'server_id';

4.查看master信息

show master status;

記錄下file及position值,后面進(jìn)行從服務(wù)器操作時(shí)要用到
5.配置從服務(wù)器,進(jìn)入mysql后執(zhí)行如下命令:

change master to
master _host='#主庫(kù)地址'
master_user='root',
master_password='#用戶(hù)密碼',
master_log_file='#主庫(kù)file值',
master_log_pos=#主庫(kù)position值;

6.啟動(dòng)slave同步功能

start slave;

7.查看slave狀態(tài)

show slave status\G

其中Slave_IO_Running與Slave_SQL_Running值都為yes,表明狀態(tài)正常。
8.測(cè)試主從復(fù)制
1.主庫(kù)上創(chuàng)建test數(shù)據(jù)庫(kù),從庫(kù)中也增加此庫(kù)

四、用mysql-proxy配置讀寫(xiě)分離

場(chǎng)景描述:

數(shù)據(jù)庫(kù)master主服務(wù)器:10.112.94.135
數(shù)據(jù)庫(kù)slave從服務(wù)器:10.112.92.143
mysql-proxy代理服務(wù)器:192.168.19.1

以下操作是在mysql-proxy中執(zhí)行的。

1.在window中安裝mysql-proxy,下載地址:https://downloads.mysql.com/archives/proxy/

image.png

安裝后目錄如下:


image.png

2.在bin問(wèn)價(jià)夾下創(chuàng)建mysql-proxy.conf文件,內(nèi)容如下:

[mysql-proxy]
admin-username=root
admin-password=123456
admin-lua-script=#mysql-proxy安裝目錄/lib/mysql-proxy/lua/admin.lua
proxy-backend-addresses=10.112.94.135:3306
proxy-read-only-backend-addresses=10.112.92.143:3306
proxy-lua-script=#mysql-proxy安裝目錄/share/doc/mysql-proxy/rw-splitting.lua
log-file=#mysql-proxy安裝目錄/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true

這里要保證目錄下每個(gè)文件夾都存在否則有可能運(yùn)行出錯(cuò)
內(nèi)容含義:
admin-username:用于中間件連接的用戶(hù),這里我還是用root偷懶
admin-password:同上用戶(hù)密碼
admin-lua-script:根據(jù)存放的文件位置自行調(diào)整
proxy-backend-addresses:主庫(kù)服務(wù)器+端口
proxy-read-only-backend-addresses:從庫(kù)服務(wù)器+端口,多個(gè)從庫(kù)用,隔開(kāi)
proxy-lua-script:根據(jù)存放的文件位置自行調(diào)整
log-file:日志文件存放位置,如果你指定了一個(gè)路徑,請(qǐng)確保手動(dòng)創(chuàng)建了對(duì)應(yīng)的文件夾,否則會(huì)報(bào)錯(cuò)
log-level:日志級(jí)別
daemon:以守護(hù)進(jìn)程方式運(yùn)行
keepalive:長(zhǎng)連接

3.在安裝文件的bin目錄下創(chuàng)建文件install.bat,內(nèi)容如下:

"#mysql-proxy安裝目錄/bin/mysql-proxy.exe" -P #代理服務(wù)器IP地址:6217 --defaults-file="#mysql-proxy安裝目錄/bin/mysql-proxy.conf"

6217端口可以自己指定,用于連接的時(shí)候使用
4.接下來(lái),用你的客戶(hù)端工具連接 192.168.19.1:6217

遇到的問(wèn)題及解決辦法:

本機(jī)網(wǎng)絡(luò)不可用

解決:vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改:ONBOOT=no為ONBOOT=yes
重啟:sudo service network restart

文件為只讀

解決:將文件用:wq!保存

用戶(hù)無(wú)法進(jìn)入sudo 模式

解決:進(jìn)入root模式修改 /etc/sudoers文件在"root ALL=(ALL) ALL"下加上“用戶(hù)名 ALL=(ALL) ALL”

mkdir命令不可用


解決:添加完超級(jí)用戶(hù)(具備超級(jí)管理員權(quán)限的用戶(hù))后用sudo獲得超級(jí)管理員權(quán)限

參考資料

https://blog.csdn.net/babyxue/article/details/80970526
https://blog.csdn.net/jcxch/article/details/48632761
https://blog.csdn.net/u010865136/article/details/78062193
https://blog.csdn.net/a774630093/article/details/79270080
https://www.cnblogs.com/zuge/p/6395369.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容