摘要:安裝軟件包和軟件包安裝的依賴包,在所有的服務(wù)器上在作為監(jiān)控的服務(wù)器上,要需額外安裝注意我是通過(guò)安裝的,但是在的倉(cāng)庫(kù)并沒(méi)有所有的安裝包。
一.安裝mysql
yum install wget
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
yum localinstall mysql57-community-release-el7-8.noarch.rpm
yum install mysql-server
啟動(dòng)服務(wù)
service mysqld start
剛剛安裝好的mysql其實(shí)會(huì)有默認(rèn)的數(shù)據(jù)庫(kù)密碼
cat /var/log/mysqld.log |grep password
獲取密碼之后,進(jìn)入數(shù)據(jù)庫(kù)
mysql -uroot -p
修改密碼
set password = password("你要設(shè)置的密碼")
在設(shè)置密碼的過(guò)程很中有可能遇到一下設(shè)置密碼錯(cuò)誤的問(wèn)題
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
遇到這種問(wèn)題的原因是mysql會(huì)對(duì)你設(shè)置的密碼有些要求,類似于要多少位啊,大小寫啊這些。這個(gè)其實(shí)與validate_password_policy的值有關(guān)。詳細(xì)的設(shè)置請(qǐng)參考(https://www.cnblogs.com/ivict...)
設(shè)置好密碼之后就可以開(kāi)始神奇的mysql之旅啦!
實(shí)現(xiàn)了在不同服務(wù)器上的數(shù)據(jù)分布
實(shí)現(xiàn)了數(shù)據(jù)讀取的負(fù)載均衡
增強(qiáng)了數(shù)據(jù)安全性
實(shí)現(xiàn)了數(shù)據(jù)庫(kù)高可用和故障切換
實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的在線升級(jí)
在了解mysql復(fù)制之前,我們還是先了解下什么叫做二進(jìn)制日志,他是mysql復(fù)制的關(guān)鍵二進(jìn)制日志是存儲(chǔ)在mysql的服務(wù)層中,它記錄了所有對(duì)mysql數(shù)據(jù)庫(kù)的修改事件,包括對(duì)數(shù)據(jù)庫(kù)的增刪改查事件和對(duì)表結(jié)構(gòu)的修改事件
記錄二進(jìn)制日志有幾種模式我們先了解一下如何確定二進(jìn)制日志的模式
show variables like "binlog_format";
該命令可以設(shè)置當(dāng)前mysql使用的二進(jìn)制日志模式
set session binlog_format="statement";
該命令是設(shè)置mysql的模式,該命令是把二進(jìn)制日志設(shè)置成了statement模式
插曲一
我在查找我的二進(jìn)制日志的時(shí)候發(fā)現(xiàn) ERROR 1381 (HY000): You are not using binary logging 目測(cè)是我的二進(jìn)制日志的設(shè)置沒(méi)有開(kāi)啟,需要找到mysql.ini文件
在mysqld配置項(xiàng)下面加上log_bin=mysql_bin以及server_id = 1(舉個(gè)例子,在集群中該值不能重復(fù))
一開(kāi)始我就是只設(shè)置了log_bin參數(shù),沒(méi)有設(shè)置server_id的參數(shù),搞了半天還不行,渣渣傷不起
插曲二
找不到mysql的配置文件,數(shù)據(jù)保存的文件,日志文件等,如果是通過(guò)上述所說(shuō)的步驟安裝的話,前面提到的文件都會(huì)默認(rèn)的在以下路徑中
/etc/my.cnf #mysql的主配置文件二進(jìn)制日志記錄模式的類型以及優(yōu)缺點(diǎn)
/var/lib/mysql #mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)文件存放位置
/var/log #mysql數(shù)據(jù)庫(kù)的日志輸出存放位置
satement
row
它會(huì)記錄下所有的行,比如update t set name = "mm" where id in (2,3,4,5)。 他會(huì)在日志中記錄update t set name = "mm" where id = 2.....
這個(gè)模式先會(huì)讓日志文件變得很大,所有會(huì)有額外的參數(shù)幫忙來(lái)解決這個(gè)問(wèn)題binlog_row_image = [FULL|MINIMAL|NOBLOB]
一張表有20列,如果只修改一個(gè)列的數(shù)據(jù),FULL 參數(shù)表示還是會(huì)記錄所有列的數(shù)據(jù)
一張表有20列,如果只修改一個(gè)列的數(shù)據(jù),MINIMAL 參數(shù)表示只會(huì)記錄修改列的數(shù)據(jù)(建議)
一張表有20列,如果只修改了一個(gè)不是blob屬性列的數(shù)據(jù),NOBLOB 參數(shù)表示會(huì)記錄所有除了blob屬性列之外的所有數(shù)據(jù)
mixed
這種模式是混合的statement和row類型,儲(chǔ)蓄的方式完全靠SQL自身去確定
mysql復(fù)制的原理主數(shù)據(jù)庫(kù)將變更寫入二進(jìn)制日志中
從數(shù)據(jù)庫(kù)將讀取主數(shù)據(jù)庫(kù)的二進(jìn)制日志并寫入到relay_log(中繼日志)中
在從數(shù)據(jù)庫(kù)上將重現(xiàn)relay_log中的日志
基于SQL段(statement)的日志是在從庫(kù)上重新執(zhí)行記錄的SQL語(yǔ)句
基于行(row)的日志則是在從庫(kù)上直接應(yīng)用對(duì)數(shù)據(jù)庫(kù)行的修改
mysql復(fù)制之基于日志點(diǎn)復(fù)制步驟:
在主數(shù)據(jù)庫(kù)上建立復(fù)制賬號(hào)
CREATE USER "repl" @ "IP段" IDENTIFIED BY "password";
對(duì)賬號(hào)進(jìn)行授權(quán),使該賬號(hào)可以有復(fù)制的權(quán)利
GRANT REPLICATION SLAVE ON *.* TO "repl" @ "IP 段 "
對(duì)主數(shù)據(jù)庫(kù)進(jìn)行配置,在my.cnf文件中(前面有介紹)
log_bin=mysql-bin
server_id=XXX#這個(gè)值在整個(gè)集群中必須唯一
在從數(shù)據(jù)庫(kù)中進(jìn)行配置,也是在my.cnf文件中
log_bin=mysql-bin
server_id=XXX#這個(gè)值在整個(gè)集群中必須唯一
relay_log=mysql-bin#中繼日志的名稱
log_slave_update=on#[可選]意思是,是否將中繼日志的內(nèi)容也存放在本機(jī)的二進(jìn)制日志中,如果該從庫(kù)也要對(duì)另外一個(gè)集群作為主庫(kù)的話,這個(gè)參數(shù)必須打開(kāi)
read_only = on#[可選]
初始化從數(shù)據(jù)庫(kù)的數(shù)據(jù),其實(shí)就是數(shù)據(jù)備份,需要在主數(shù)據(jù)中執(zhí)行一下命令
mysqldump --all-databases -uroot -p >all.sql
注:更多參數(shù)以后在補(bǔ)充
把備份好的數(shù)據(jù)庫(kù)發(fā)送給從庫(kù)所在的服務(wù)器上,如果主從的數(shù)據(jù)庫(kù)數(shù)據(jù)已經(jīng)一致,可以忽略這一步
scp all.sql(發(fā)送的文件) root@對(duì)方服務(wù)器:目標(biāo)目錄
在從庫(kù)上啟動(dòng)復(fù)制鏈路
change master to master_host = "master_host_ip",master_user = "repl", master_password = "xx", master_log_file = "主庫(kù)的日志文件",master_log_pos="偏移量";
注意:
主庫(kù)的日志文件名稱和偏移量是在哪里找呢?可以在主庫(kù)中使用
show master status;
開(kāi)啟slave
start slave;
查看slave狀態(tài)
show slave status;
插曲:
我在啟動(dòng)slave的過(guò)程中,發(fā)現(xiàn)并沒(méi)有連接成功,在show slave status中看到一下錯(cuò)誤
分析了一下會(huì)發(fā)現(xiàn)主數(shù)據(jù)的服務(wù)器并沒(méi)有給3306開(kāi)放對(duì)外的端口
firewall-cmd --list-port #查看現(xiàn)在開(kāi)放的端口有哪些mysql復(fù)制之基于GTID復(fù)制(版本>=5.6)
firewall-cmd --add-port=3306/tcp --permanent #添加3306為開(kāi)放的端口
firewall-cmd --reload #重新刷新服務(wù)器開(kāi)放的端口
從庫(kù)會(huì)告訴主庫(kù)他已經(jīng)執(zhí)行完成的GTID值
主庫(kù)會(huì)發(fā)送從庫(kù)未執(zhí)行事務(wù)的GTID值
這能保證同一個(gè)事務(wù)只在指定的從庫(kù)執(zhí)行一次
GTID即全局事務(wù)ID,其保證為每一個(gè)在主庫(kù)提交的事務(wù)在復(fù)制集群中都可以生成一個(gè)唯一的ID。
在主數(shù)據(jù)庫(kù)上建立復(fù)制賬號(hào),該步驟和基于日志點(diǎn)復(fù)制是一樣的。所以不多做介紹
在主數(shù)據(jù)庫(kù)中的配置,在基于日志點(diǎn)配置的基礎(chǔ)上加上了
gtid-mode = on
enforce-gtid-consistency=on
log-slave-updates=on#mysql 5.7之后就不需要了
注意:在使用了enforce-gtid-consistency參數(shù)之后會(huì)對(duì)mysql有一些限制
不能使用create table ....select 來(lái)創(chuàng)建表
在事務(wù)中使用create temporary table建立臨時(shí)表時(shí),不能使用關(guān)聯(lián)更新事務(wù)表和非事務(wù)表(我沒(méi)試過(guò),看文檔時(shí)這么寫的)
在從庫(kù)中的配置,同樣也是在基于日志點(diǎn)的復(fù)制配置基礎(chǔ)上
gtid-mode = on
enforce-gtid-consistency=on
log-slave-updates=on#mysql 5.7之后就不需要了
read_only=read#[建議]
master_info_repository=table#[建議]
relay_log_info_repository=table#[建議]
最后的命令我們完成之后再補(bǔ)充
初始化從數(shù)據(jù)庫(kù),該過(guò)程和基于日志點(diǎn)的復(fù)制語(yǔ)句是一樣的
啟動(dòng)基于GTID的復(fù)制
CHANGE MASTER TO MASTER_HOST=master_host_ip, MASTER_USER="repl", MASTER_PASSWORD="13659787422tt", MASTER_AUTO_POSITION=1;
剩下的步驟是和基于日志點(diǎn)的步驟是一樣的
優(yōu)點(diǎn):
可以很方便地進(jìn)行故障轉(zhuǎn)移
從庫(kù)不會(huì)丟失主庫(kù)的任何數(shù)據(jù)
缺點(diǎn):
故障處理比較復(fù)雜
對(duì)執(zhí)行的SQL有一些限制
三.mysql復(fù)制性能優(yōu)化 影響主從延遲的因素主庫(kù)寫入二進(jìn)制日志的時(shí)間(解決辦法:控制主庫(kù)的事務(wù)大小,分割大事務(wù))
二進(jìn)制日志傳輸時(shí)間,主要是二進(jìn)制文件的大小(解決辦法:二進(jìn)制文件格式可以設(shè)為mixed,或者使用row的話,要記得設(shè)置set binlog_raw_image=minimal)
默認(rèn)情況下從庫(kù)只有一個(gè)SQL線程,主庫(kù)上并發(fā)的修改在從庫(kù)上變成了串行(解決辦法:使用多線程復(fù)制,以下是啟動(dòng)多線程的步驟,適用于版本>=5.7)
stop slave (停止鏈路復(fù)制)
set global slave_parallel_type="logical_clock" (確認(rèn)以邏輯時(shí)鐘方式啟動(dòng)多線程復(fù)制,我也暫時(shí)不同什么叫做邏輯時(shí)鐘,以后再去討論)
set global slave_parallel_workers = 4(確認(rèn)并發(fā)處理的線程數(shù))
start slave (開(kāi)啟鏈路復(fù)制)
四.利用MHA工具實(shí)現(xiàn)mysql高可用 MHA主從切換的過(guò)程嘗試從出現(xiàn)故障的主數(shù)據(jù)庫(kù)保存二進(jìn)制文件
從多個(gè)備選從服務(wù)器中選舉出新的備選主服務(wù)器
在備選主服務(wù)器和其他從服務(wù)器之間同步差異二進(jìn)制數(shù)據(jù)
應(yīng)用從原來(lái)主數(shù)據(jù)庫(kù)服務(wù)器上保存二進(jìn)制日志,但是在這一步如果出現(xiàn)了主鍵的重復(fù),將會(huì)導(dǎo)致故障轉(zhuǎn)移的出錯(cuò)
提升備選主數(shù)據(jù)庫(kù)服務(wù)器為新的數(shù)據(jù)庫(kù)服務(wù)器
遷移集群中的其他從數(shù)據(jù)庫(kù)服務(wù)器作為新的主數(shù)據(jù)庫(kù)的從服務(wù)器
配置步驟首先說(shuō)明的是MHA工具是可以支持基于GTID的復(fù)制和基于日志點(diǎn)的復(fù)制。在本次的練習(xí)中,我們也是基于GTID。
配置集群內(nèi)所有主機(jī)的SSH免認(rèn)證登陸
ssh-keygen
使用 ssh-keygen 命令之后,可以一直按回車鍵,當(dāng)然,也可以根據(jù)個(gè)人需求來(lái)輸入相關(guān)內(nèi)容。最終,會(huì)生成 id_rsa 和 id_rsa.pub 兩個(gè)文件。
然后,把本地的公鑰添加到對(duì)方服務(wù)器的 /.ssh/authorized_keys 文件里。
ssh root@192.168.239.131 "mkdir -p .ssh && cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
這樣設(shè)置之后,每次登錄都不再需要輸入密碼了。
其他問(wèn)題
可能因?yàn)槟承┎僮髦螅蝗话l(fā)現(xiàn)登錄需要輸入密碼,但登錄配置并沒(méi)有任何修改的,通過(guò)檢查發(fā)現(xiàn) .ssh 目錄的權(quán)限問(wèn)題。最后,只需要重新修改權(quán)限就解決了。
chmod -R 700 .ssh
安裝MHA-node軟件包和MHA-manager軟件包
安裝MHA的依賴包,
在所有的服務(wù)器上
yum install perl-DBD-MySQL ncftp
在作為監(jiān)控的服務(wù)器上,要需額外安裝
yum -y install perl_Config_Tiny.noarch perl-Time-HiRes.x86_64 perl-Parallel-ForkManager perl-Log-Dispatch-perl.noarch perl-DBD-MySQL ncftp
注意:我是通過(guò)yum安裝的,但是在yum的倉(cāng)庫(kù)并沒(méi)有所有的安裝包。其實(shí),CentOS還有一個(gè)源叫做 EPEL (Extra Packages for Enterprise Linux),為“紅帽系”的操作系統(tǒng)提供額外的軟件包,適用于RHEL、CentOS等,里面有1萬(wàn)多個(gè)軟件,強(qiáng)烈建議安裝。命令如下
yum install epel-release
yum update -y
安裝好之后,再重新執(zhí)行yum安裝之前沒(méi)有安裝好的依賴包
建立主從復(fù)制集群
配置MHA管理節(jié)點(diǎn),創(chuàng)建好一個(gè)專門存放MHA配置的文件夾,只需要在監(jiān)管的服務(wù)器上設(shè)置即可
mkdir -p /etc/mha #我實(shí)踐過(guò)程中mha配置文件存放的位置
mkdir -p /home/mysql_mha #mha工作目錄,例如主庫(kù)宕機(jī)了,用來(lái)存放主庫(kù)的二進(jìn)制文件
添加MHA所用到的賬號(hào),可以直接在主庫(kù)上去添加,因?yàn)檫@樣就可以同時(shí)同步到其他數(shù)據(jù)庫(kù)上
grant all privileges on *.* to mha@"%" identified by "13659787422tt";
在MHA配置文件中進(jìn)行配置
[server_default]
user = mha
password = 13659787422tt
manager_workdir = /home/mysql_mha
manager_log = /home/mysql_mha/manager.log
remote_workdir = /home/mysql_mha #需要在集群中的其他節(jié)點(diǎn)設(shè)置一樣路徑的目錄
ssh_user = root#ssh免認(rèn)證的用戶,前面有設(shè)置好了,忘記了可以回頭看看哦
repl_user = repl #用于數(shù)據(jù)庫(kù)復(fù)制的賬號(hào)和密碼
repl_password = 13659787422tt
ping_interval = 1 #是用于監(jiān)控服務(wù)器對(duì)master服務(wù)器檢測(cè)是否正常的事件間隔,這里設(shè)置了1秒
master_binlog_dir = /var/lib/mysql #告訴監(jiān)控服務(wù)器要去主數(shù)據(jù)庫(kù)哪里獲取二進(jìn)制文件
secondary_check_script = #[可選]在安裝好MHA時(shí)已經(jīng)下載好的腳本,可以用于監(jiān)控服務(wù)器多方面對(duì)master服務(wù)器進(jìn)行連接檢測(cè),避免了一些網(wǎng)絡(luò)的抖動(dòng)引起主從切換
[server 1]
hostname = 192.168.239.129
candidate_master = 1 #該服務(wù)器是否用于作為主數(shù)據(jù)進(jìn)行選舉
[server 2]...#集群中有多少的服務(wù)器就相應(yīng)設(shè)置多少
no_master = 1#不參與主數(shù)據(jù)的選舉
使用masterha_check_ssh和masterha_check_repl對(duì)配置進(jìn)行檢驗(yàn)
啟動(dòng)并檢驗(yàn)MHA
masterha_check_ssh --conf=/etc/mha/mha.cnf
出現(xiàn)以下的顯示,證明ssh檢測(cè)成功
masterha_check_repl --conf=/etc/mha/mha.cnf
出現(xiàn)以下的顯示,證明MHA的配置成功
現(xiàn)在就可以啟動(dòng)MHA了
nohup masterha_manager --conf=/etc/mha/mha.cnf #nohup是可以讓程序后臺(tái)運(yùn)行
查看MHA的進(jìn)程是否已經(jīng)啟動(dòng)
ps -ef |grep masterha_manager
因?yàn)镸HA是不能為主庫(kù)創(chuàng)建虛擬IP的,所以需要收到到主庫(kù)去創(chuàng)建虛擬IP,在之后的遷移中,虛擬IP就會(huì)主動(dòng)得轉(zhuǎn)移到新的主庫(kù)中
因?yàn)槲椰F(xiàn)在的主庫(kù)是192.168.239.129,用以下命令創(chuàng)建虛擬IP
ifconfig ens33:1 192.168.239.90/24
ens33是對(duì)應(yīng)的網(wǎng)卡(我理解的),根據(jù)自己的機(jī)器做相應(yīng)的改動(dòng)
配置到這里MHA算是配置完成了。(未完)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/29170.html
大家在學(xué)習(xí)計(jì)算機(jī)的時(shí)候,對(duì)于最常用的幾個(gè)端口比如80端口肯定有很深的印象,但是對(duì)于其他一些不是那么常用的端口可能就沒(méi)那么了解。所以,在一些使用頻率相對(duì)較高的端口上,很容易會(huì)引發(fā)一些由于陌生而出現(xiàn)的錯(cuò)誤,或者被黑客利用某些端口進(jìn)行入侵。對(duì)于這件事情,大部分人都很頭疼——最多可達(dá)65535個(gè)的端口,讓人怎么記?別怕,小編專門給大家整理了一些比較常見(jiàn)端口信息,遇到問(wèn)題,一查就好啦!一個(gè)計(jì)算機(jī)最多有655...
MindsDB作為一個(gè)開(kāi)源項(xiàng)目,它旨在將機(jī)器學(xué)習(xí)模型無(wú)縫集成到現(xiàn)有的數(shù)據(jù)庫(kù)系統(tǒng)中,為用戶提供實(shí)時(shí)的數(shù)據(jù)預(yù)測(cè)能力。這個(gè)項(xiàng)目的創(chuàng)新之處在于,它能夠以簡(jiǎn)單、直觀的方式讓開(kāi)發(fā)者和非技術(shù)人員都能夠利用AI進(jìn)行數(shù)據(jù)分析和預(yù)測(cè)。 它是根據(jù)企業(yè)數(shù)據(jù)庫(kù)定制的AI平臺(tái),使用者可以根據(jù)數(shù)據(jù)庫(kù)、矢量存儲(chǔ)和應(yīng)用程序數(shù)據(jù)實(shí)時(shí)創(chuàng)建、提供和微調(diào)模型。簡(jiǎn)介MindsDB 的核心理念是使數(shù)據(jù)庫(kù)不僅能夠存儲(chǔ)和檢索數(shù)據(jù),還能基于這些數(shù)據(jù)...
本文關(guān)鍵給大家介紹了Python根據(jù)ssh遠(yuǎn)程桌面連接Mysql數(shù)據(jù)庫(kù)操作實(shí)例詳細(xì)說(shuō)明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發(fā)展,盡早漲薪 環(huán)境 如果有需要瀏覽虛擬服務(wù)器的Mysql數(shù)據(jù)庫(kù)系統(tǒng),但是該Mysql數(shù)據(jù)庫(kù)系統(tǒng)為了安全起見(jiàn)期內(nèi),安全保護(hù)措施設(shè)為只可以寬帶連接(也就是說(shuō)你需要驗(yàn)證到該臺(tái)網(wǎng)絡(luò)服務(wù)器才能進(jìn)行),別的遠(yuǎn)程桌面連接是不能夠訪問(wèn)外網(wǎng),而且對(duì)應(yīng)的...
本文關(guān)鍵闡述了python前后文管理工具合同的完成,在python中所有完成了前后文管理工具協(xié)議書目標(biāo)都能用應(yīng)用with實(shí)際操作,with開(kāi)啟了目標(biāo)前后文管理工具 序言 在前后文管理工具協(xié)議書的過(guò)程當(dāng)中,牽涉到2個(gè)魔術(shù)師方式__enter__方法與__exit__方式 在python中所有完成了前后文管理工具協(xié)議書目標(biāo)都能用應(yīng)用with實(shí)際操作 with開(kāi)啟了目標(biāo)前后文管理工具 前后...
文中關(guān)鍵闡述了Python數(shù)據(jù)庫(kù)連接并批量插入包括時(shí)長(zhǎng)記載的實(shí)際操作,文章內(nèi)容緊扣主題進(jìn)行詳盡的基本介紹,具有很強(qiáng)的實(shí)用價(jià)值,需用的同學(xué)可以學(xué)習(xí)一下 序言 服務(wù)平臺(tái): windows10.0 python3.8 oracle mysql 目地 必須通過(guò)python建立模型,并把結(jié)論儲(chǔ)存至SQL數(shù)據(jù)庫(kù)系統(tǒng)中,其中還有某列數(shù)據(jù)信息為時(shí)長(zhǎng)種類,在儲(chǔ)存全過(guò)程碰到一些現(xiàn)象,現(xiàn)就處理方式整...
消息中間件故障分析一例 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; margin:...
閱讀 1598·2023-04-26 02:43
閱讀 2994·2021-11-11 16:54
閱讀 1344·2021-09-23 11:54
閱讀 1165·2021-09-23 11:22
閱讀 2359·2021-08-23 09:45
閱讀 845·2019-08-30 15:54
閱讀 3094·2019-08-30 15:53
閱讀 3184·2019-08-30 15:53