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