1、前置工作
首先準備兩臺可以互相ping通的機器,兩臺機器可以互為主從,示例:10.210.23.77主服務器
10.20.84.183從服務器
2、安裝
在兩臺機器上各自安裝數(shù)據(jù)
解壓MariaDB安裝包;
tar zxvf MariaDB.tgz
cd mariadb
?安裝MariaDB依賴包;
rpm -ivh *.rpm --force --nodeps
?啟動MariaDB服務
systemctl start mariadb
?安全配置
# 啟動成功后運行如下命令進行安全配置
mysql_secure_installation
# 開始安全配置
??① 輸入當前密碼,初次安裝后是沒有密碼的,直接回車
? ② 未root設置密碼,輸入Y。
③ 設置root密碼,輸入inf0sec312
④ 確認輸入root密碼,再次輸入inf0sec312。
⑤ 是否移除匿名用戶,輸入Y。
⑥ 拒絕用戶遠程登錄,輸入n。
⑦ 刪除test庫,輸入n。
⑧ 重新加載權限表,輸入Y
如下圖所示,完成配置。
?賦予root用戶遠程連接權限
# 輸入密碼登錄MariaDB控制臺
mysql -u root -p
# 賦予root用戶遠程連接權限
grant all privileges on *.* to 'root'@'%' identified by 'inf0sec312' with grant option;
# 刷新
flush privileges;
?賦予root用戶遠程連接權限命令中“inf0sec312”為數(shù)據(jù)庫密碼,與4中安全配置密碼一致。請根據(jù)現(xiàn)場配置進行修改。
完成MariaDB安裝和配置?
?注意:這種方式安裝的mariadb數(shù)據(jù)庫各種配置文件不在一個地方,分散到/usr/bin/下,/var/lib/mysql/下
3、配置
10.210.23.77主服務配置
[mysqld]
skip-grant-tables
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
log_slave_updates=true
expire_logs_days=7
max_binlog_size=500M
slave_parallel_threads=2
binlog_format=ROW
#復制框架
server_id=1
log_bin=binlog
max_connections=200
?10.20.84.183從服務配置
[mysqld]
skip-grant-tables
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
log_slave_updates=true
expire_logs_days=7
max_binlog_size=500M
slave_parallel_threads=2
binlog_format=ROW
#復制框架
server_id=2
log_bin=binlog
max_connections=200
在使用腳本mariadb時,通過腳本設置密碼時,就不再執(zhí)行mysql_secure_installation了,所以需要先設置無密碼登錄,否則直接執(zhí)行修改密碼語句會報錯,如圖所示:
skip-grant-tables代表跳過權限認證可進登錄,所有配置文件添加這條,便可實現(xiàn)無密碼進行登錄數(shù)據(jù),但是加了這個,對數(shù)據(jù)庫的安全性造成一定的威脅,所以及時禁用
進去數(shù)據(jù)庫之后改密碼,隨后再把配置文件中的skip-grant-tables刪掉,重啟數(shù)據(jù)庫
?注意:無密碼進去數(shù)據(jù)庫之后修改之前先進行刷新權限,否則語句執(zhí)行報錯
log-error:代表mariadb的錯誤日志文件所在目錄
server_id:代表每個機器的唯一標識符,切記不可重復?。?!
log_bin:開啟二進制日志文件,binlog是日志文件名
binlog-do-db:代表要同步的數(shù)據(jù)庫,若不配置此項,則代表同步所有數(shù)據(jù)庫,上面配置則沒配置,代表同步所有數(shù)據(jù)庫
在主服務器上建立帳戶并授權slave
create user 'rep'@'%' identified with mysql_native_password by '$mysql_pwd';
grant replication slave on *.* to 'rep'@'%';
flush privileges;
登錄主服務器10.210.23.77的mariadb,查詢master的狀態(tài)?
配置從服務器 Slave10.20.84.183
change master to master_host='10.210.23.77',master_user='root',master_password='123456',master_log_file='bin-log.000002',master_log_pos=2759;
# ps:10.210.23.77 為主服務器ip
# bin-log.000002 為上面第三點的 File
# 2759為上面第三點的 Position
# 啟動從服務器復制功能
start slave;
# 檢查從服務器復制功能狀態(tài)
show slave status\G
?
?看到Slave_IO_Running和Slave_SQL_Running兩項值都為yes,則代表配置成功
登錄服務器10.20.84.183的mariadb,查詢master的狀態(tài)?
?配置從服務器Slave10.210.23.77
change master to master_host='10.20.84.183',master_user='root',master_password='123456',master_log_file='bin-log.000002',master_log_pos=2759;
# ps:10.20.84.183 為主服務器ip
# bin-log.000002 為上面第三點的 File
# 2759為上面第三點的 Positionchange master to master_host='10.210.23.77',master_user='root',master_password='123456',master_log_file='bin-log.000002',master_log_pos=2759;
# ps:10.210.23.77 為主服務器ip
# bin-log.000002 為上面第三點的 File
# 2759為上面第三點的 Position
# 啟動從服務器復制功能
start slave;
# 檢查從服務器復制功能狀態(tài)
show slave status\G
??看到Slave_IO_Running和Slave_SQL_Running兩項值都為yes,則代表配置成功
此時,兩臺機器的互為主從已經配置好
Slave_IO_Running負責與主機的io通信,Slave_SQL_Running自己的slave mysql進程
在配置過程中,會存在Slave_IO_Running為no和Connecting 都非yes的情況
1.問題原因:
? ? ? (1)網絡不通
? ? ? (2)防火墻端口未開放
? ? ? (3)mysql賬戶密碼錯誤
? ? ? (4)mysql主從機配置文件寫錯
? ? ? (5)配置從機連接語法錯誤
? ? ? (6)主機未開放賬戶連接權限
2、解決步驟
(1)網絡不通:用ping指令嘗試是否可以接收到返回的數(shù)據(jù)
?(2)防火墻端口未開放:
1:查看防火狀態(tài)
systemctl status firewalld
service iptables status
2:暫時關閉防火墻
systemctl stop firewalld
service iptables stop
3:永久關閉防火墻
systemctl disable firewalld
chkconfig iptables off
4:重啟防火墻
systemctl enable firewalld
(3)從服務器在配置時主服務器的二進制日志名稱寫錯,我就是?。。?/p>
所以好好檢查show master status查出的File對應的文件名
(4)主機未開放賬戶連接權限
通過指令"select user,host from user;"查看備份賬號IP訪問權限是否為'%',通過"show grants for repl"查看復制賬戶是否擁有REPLICATION CLIENT、REPLICATION SLAVE、SUPER、RELOAD權限;
? ?如果沒有的話使用命令授權
grant REPLICATION CLIENT ON *.* TO repl;
grant REPLICATION SLAVE ON *.* TO repl;
grant SUPER ON *.* TO repl;
grant reload on *.* to repl;
FLUSH PRIVILEGES;
? 最后從機重啟slave配置"stop slave","start slave","show slave status"
也可以使用mysql -u root -h10.20.84.183命令,查看是否當前用戶有權限進入另一臺機器
4、測試
在兩臺機器的數(shù)據(jù)庫上進行insert、update、del操作,可以看到另一臺機器的數(shù)據(jù)庫也做了相應改動,則雙機熱備全部完成
5、問題總結
1、機器重啟后,mariadb數(shù)據(jù)庫服務起不來
執(zhí)行systemctl stop mariadb不報錯
執(zhí)行systemctl status mariadb報錯
執(zhí)行systemctl start mariadb也報錯
排查一番,仍未解決,去mariadb日志查詢:路徑為:/var/log/mariadb/mariadb.log(路徑根據(jù)自己的路徑來)
定位錯誤,開始百度,發(fā)現(xiàn)是重啟機器造成了pid文件丟失,解決方法如下
給PID所在的路徑添加mysql屬主與屬組的權限> mkdir /var/run/mariadb
> chown mysql.mysql /var/run/mariadb/文章來源:http://www.zghlxwxcb.cn/news/detail-765320.html
參考博客:centos mysql pid_Centos下Mysql因為pid文件啟動失敗問題解析-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-765320.html
到了這里,關于MariaDB數(shù)據(jù)庫的主從配置的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!