日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql有没有实现高可用_MySQL高可用架构:mysql+keepalived实现

發布時間:2025/3/11 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql有没有实现高可用_MySQL高可用架构:mysql+keepalived实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

系統環境及架構

#主機名 系統版本 mysql版本 ip地址

mysqlMaster centos7.4 mysql5.7 192.168.1.42

mysqlSlave centos7.4 mysql5.7 192.168.1.43

#vip:192.168.1.41

MySQL高可用架構:mysql+keepalived實現MySQL高可用架構:mysql+keepalived實現

在master和slave上分別進行數據庫的安裝

yum install epel* -y && yum clean all && yum makecache

rpm -Uvh http://repo.mysql.com/mysql57-community-release-el7.rpm

yum clean all && yum makecache

yum install gcc gcc-c++ openssl-devel mysql mysql-server mysql-devel -y

創建數據庫文件存放路徑

mkdir /data/mysql -p

chown -R mysql:mysql /data/mysql

配置mysql配置文件

#在mysqlMaster上配置mysql配置文件

vi /etc/my.cnf

[mysqld]

server-id = 1#全局唯一,每臺都不能一樣

log-bin = mysql-bin#log-bin表示開啟二進制日志記錄,mysql-bin表示日志文件的命名格式,會生成mysql-bin.0001 等等

relay-log = mysql-relay-bin#指定中繼日志格式(拉取主mysql日志后,在從庫上生成的日志)

replicate-wild-ignore-table=mysql.%#指定那些庫或則表不進行同步,mysql是庫名,.%表示下面所有的表,mysql.user 表示不同不mysql庫下的user表

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

#replicate-wild-do-table=boke.%#表示同步那個庫

#注意:不要在主庫上使用binlog-do-db 或 binlog-ignore-db選項

#也不要在從庫上使用 replicate-do-db 或 replicate-ignore-db 選項,因為這有可能產生跨庫更新失敗的問題.推薦從庫上使用 replicate_wild_do_table 和 replicate_wild_ignore_table 這兩個選項來解決復制過濾問題

datadir=/data/mysql

socket=/data/mysql/mysql.sock

user=mysql

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

character-set-server=utf8

[mysql]

socket=/data/mysql/mysql.sock

default-character-set=utf8

[client]

socket=/data/mysql/mysql.sock

default-character-set=utf8

user=root

password=NCYD-tianyu@0791

#若是不寫上這個字段,在本機用命令進入mysql會報錯,提示默認路徑/var/lib/mysql/mysql.sock找不到

在mysqlSlave上配置mysql配置文件

vi /etc/my.cnf

[mysqld]

server-id = 2

log-bin = mysql-bin

relay-log = mysql-relay-bin

replicate-wild-ignore-table=mysql.%

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

datadir=/data/mysql

socket=/data/mysql/mysql.sock

user=mysql

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

character-set-server=utf8

[mysql]

socket=/data/mysql/mysql.sock

default-character-set=utf8

[client]

socket=/data/mysql/mysql.sock

default-character-set=utf8

user=root

password=NCYD-tianyu@0791

#若是不寫上這個字段,在本機用命令進入mysql會報錯,提示默認路徑/var/lib/mysql/mysql.sock找不到,先初始化數據庫(需要進行初始化在/data/mysql目錄里生成必要的信息)

#mysql5.7.7以后的初始化方法

mysqld --initialize --user=mysql --datadir=/data/mysql

#mysql5.7.7以前的初始化方法

mysql_install_db --user=mysql --datadir=/data/mysql

分別啟動主從數據庫

#在centos7里面,必須先關閉selinux,否在無法啟動mysqld

systemctl start mysqld

分別為主從mysql做安全加固

#查到上一步,首次啟動mysql,系統自動生成的密碼( cat /var/log/mysqld.log |grep pass )

mysql_secure_installation#使用該命令更改隨機root密碼(修改為 NCYD-tianyu@0791 )

手動同步數據(假如現在的環境,主上已經有數據了,從是新的)

1:在主上數據庫中創建用于復制的用戶,并授權

mysql> GRANT REPLICATION SLAVE ON . to ‘tongbu’@‘192.168.1.43’ identified by ‘123456789’;

2:在主mysql上先鎖表(使其所有表變成只讀狀態)

mysql> flush tables with read lock;#不要退出終端,否在這個鎖就失效了

3:再開啟另一個命令行終端,使用myqldump等工具將數據導出(或則直接打包存儲mysql數據的目錄,并發送到從機上)

4:將導出數據復制到從機上,并創建新庫并導入數據

互相置從,互相置主(以達到雙主模式)

在mysqlMaster上將mysqlSlave設置為自己的主角色服務器

mysql> show master status;#查看mysqlSlave的狀態(記錄File名字,和Position)

change master to

master_host = ‘192.168.1.43’,

master_user = ‘tongbu’,

master_password = ‘123456789’,

master_log_file = ‘mysql-bin.000002’,

master_log_pos = 1006;

mysql> start slave; #啟動slave端的復制進程(某些版本是:slave start; )

mysql> show slave status\G #查看slaves端的I/O進程,與SQL進程

在從上將mysqlMaster設置為自己的主角色服務器

mysql> show master status;#查看mysqlMaster的狀態(記錄File名字,和Position)

change master to

master_host = ‘192.168.1.42’,

master_user = ‘tongbu’,

master_password = ‘123456789’,

master_log_file = ‘mysql-bin.000002’,

master_log_pos = 1006;

mysql> start slave; #啟動slave端的復制進程

mysql> show slave status\G #查看slaves端的I/O進程,與SQL進程

驗證是否同步

1:第一驗證在myssqlMaster上創建庫,mysqlSlave上是否存在

2:第二驗證在mysqlSlave上創建庫,mysqlMaster上是否存在

安裝keepalived實現VIP切換,達到高可用

yum install keepalived -y

#在mysqlMaster和mysqlSlave上都創建檢查mysql的檢查腳本,并賦予執行權限

touch /etc/keepalived/mysql_check.sh

chmod +x /etc/keepalived/mysql_check.sh

vi /etc/keepalived/mysql_check.sh

#!/bin/bash

#slave_is=( $(mysql -uroot -pNCYD-tianyu@0791 -e “show slave status\G” | grep “Slave_.Running" | awk ‘{print $2}’) ) 在新版本的myql中,直接將密碼寫在命令行,會進行安全提示,解決辦法是將其寫在mysql的配置文件里的 [client] 字段里,寫法見上面mysql的配置文件

slave_is=( $(mysql -e “show slave status\G” | grep "Slave._Running” | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}?') )

if [ "{slave_is[0]}" = “Yes” -a “$slave_is[1]” = “Yes”]

then

exit 0

else

exit 1

fi

#注意,keepalived檢查腳本vrrp_script,只認兩個返回值,0表示正常,非0表示不正常(這在寫腳本是要注意),不正常就要做相關的切換

配置keepalived,以實現高可用

vi /etc/keepalived/keepalived.conf

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

vrrp_skip_check_adv_addr

#vrrp_strict#注意:當你發現無法ping通虛擬VIP時,建議將此行注釋掉

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_script mysql_check {

script “/etc/keepalived/mysql_check.sh”

#這個腳本,若是發現不執行,可以檢查他的權限,777是不可以的,日志提示不安全,可以直接chmod +x /etc/keepalived/mysql_check.sh 就行

#script “shutdown -r now”#或者,直接用命令進行調試

interval 2

weight 2

}

vrrp_instance VI_1 {

state MASTER#mysqlMaster上是MASTER;mysqlSlave上是BACKUP

interface ens192

virtual_router_id 52

priority 100#mysqlMaster上是100;mysqlSlave上是90

advert_int 1

nopreempt#配置VIP(注意:故障切換搶占模式,盡量關閉,默認是開啟的,這個參數只需要在高優先級上設置即可)

authentication {

auth_type PASS

auth_pass 1111

}

track_script {#調用上面定義檢查mfsmaster的腳本

mysql_check

}

virtual_ipaddress {

192.168.1.41/24 dev ens192

}

}

啟動keepalived

systemctl start keepalived

總結

以上是生活随笔為你收集整理的mysql有没有实现高可用_MySQL高可用架构:mysql+keepalived实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。