數(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/

安裝后目錄如下:

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