centos7搭建mysql主從

1.Linux安裝mysql方法

linux安裝mysql有多種方式:

  • 像直接解壓縮tar包,然后配置my.cnf(window中的mysql配置文件是my.ini)并使用命令啟動(dòng)mysql
  • 像centos7自帶mariadb(這個(gè)可以與mysql庫對照使用,功能幾乎一樣)數(shù)據(jù)庫
  • 也可以使用rpm安裝
  • 也可以使用docker安裝等。本文使用rpm安裝方式。

2.Centos7通過rpm方式安裝mysql(5.7.36)

1.centos7排除mariadb(以防與mysql沖突)

Centos7可能默認(rèn)有 mariadb,可能與mysql安裝有沖突,使用rpm -qa | grep mariadb看mariadb是否存在
若存在:

  • 使用rpm -e --nodeps mariadb-*全部刪除:
  • 使用yum remove mysql mysql-server mysql-libs compat-mysql51全部刪除;
    倆條命令同時(shí)執(zhí)行一下

mysql安裝包版本:

image.png

2.以下操作在mysql主從服務(wù)器同步操作

這里我首先在主服務(wù)器上執(zhí)行了一遍,故以下圖片展示僅為從服務(wù)器執(zhí)行操作

  • 1.在/usr/local/下新建文件夾solf并將mysql安裝包上傳
  • 2.cd /usr/local/solf,此時(shí)路徑和包如圖


    image.png
  • 3.執(zhí)行tar –xvf mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar,解壓如下所示


    image.png
  • 4.rpm安裝順序

rpm -ivh mysql-community-common-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.36-1.el7.x86_64.rpm

注:安裝mysql-community-server-5.7.36-1.el7.x86_64.rpm
若出現(xiàn)以下錯(cuò)誤(這里我沒有按順序安裝,是直接安裝service出現(xiàn)的問題):

image.png

分別使用yum安裝相關(guān)(若遇到詢問全選y,要不就直接回車)

yum install libaio
yum install perl
yum -y install net-tools

安裝成功后會(huì)創(chuàng)建mysql組、mysql用戶。數(shù)據(jù)庫目錄的屬組為mysql:mysql。使用find / -name mysql查看相關(guān)信息如下:


image.png
  • 5.查看mysql狀態(tài)service mysqld status,結(jié)果如下:

    image.png

    這個(gè)代表mysql未啟動(dòng),使用service mysqld start啟動(dòng)mysql。
    Mysql安裝以后就是開機(jī)啟動(dòng),故不需要設(shè)置了。

  • 6.此時(shí)mysql已經(jīng)安裝成功,需要配置一下密碼并授權(quán)遠(yuǎn)程登陸

使用vi /etc/my.cnf,打開mysql配置添加skip-grant-tables配置(跳過密碼檢查)


image.png

現(xiàn)在登錄mysql不需要密碼登錄,使用mysql –uroot –p直接登錄
修改root密碼(方法很多):
update mysql.user set authentication_string=password('123456') where user='root';
執(zhí)行flush privileges;(即刻生效)
退出,編輯vi /etc/my.cnf,刪除或者注釋掉skip-grant-tables
最后使用systemctl restart mysqld.service命令重啟mysql服務(wù)。
再次登錄mysql,可能會(huì)有這倆個(gè)錯(cuò)誤:

image.png

image.png

一個(gè)是必須重置密碼才能操作,一個(gè)是密碼設(shè)的太簡單也會(huì)報(bào)錯(cuò)
解決辦法:
輸入命令set global validate_password_policy=0;這行命令的意思是mysql開啟簡單密碼校驗(yàn)
set global validate_password_length=4;這行命令意思是校驗(yàn)長度為4位
然后使用alter user 'root'@'localhost' identified by '123456';重新設(shè)置密碼
授權(quán)遠(yuǎn)程登錄:
grant all privileges on *.* to 'root'@'%' identified by '123456';
執(zhí)行flush privileges;
其中%代表允許所有主機(jī)遠(yuǎn)程登錄,若只想允許某臺(tái)主機(jī)遠(yuǎn)程登錄,將%換為遠(yuǎn)程主機(jī)地址就可以
至此centos7安裝mysql成功。

3.mysql主從搭建

  • 1.配置主機(jī)ip及名字
    首先在倆臺(tái)服務(wù)器上打開vi /etc/hosts文件,文件最底下加入mysql主從服務(wù)器ip配置。
    主機(jī)ip地址 主機(jī)名稱
    例:172.30.11.12(你自己的服務(wù)器地址) master
    172.30.11.13 slave

    1. 兩臺(tái)主機(jī)都關(guān)閉防火墻和SELinux服務(wù)
      關(guān)閉防火墻命令如下:
      systemctl stop firewalld; //關(guān)閉防火墻
      systemctl disable firewalld; //將防火墻設(shè)置開機(jī)不自啟
      關(guān)閉selinux服務(wù):
      vi /etc/selinux/config //進(jìn)入到此目錄下將selinux的狀態(tài)設(shè)置為disabled
      image.png

      再使用 set enforce 0 命令將selinux的修改生效
  • 3.主從配置

1.mysql主服務(wù)器配置(master節(jié)點(diǎn))

修改my.cnf配置文件,vi /etc/my.cnf,在[mysqld]下任意位置加

#保持唯一,我是根據(jù)主機(jī)地址最后一位命名的
server-id=14
#開啟binlog,指定binlog的文件前綴
log-bin=mysql-bin

修改結(jié)果如下:

image.png

退出,重啟mysql服務(wù),systemctl restart mysqld.service
登錄進(jìn)mysql,檢查binlog是否開啟,on為開啟,命令show variables like '%log_bin%';如圖所示:
image.png

在主節(jié)點(diǎn)master數(shù)據(jù)庫上創(chuàng)建一個(gè)mysqlsync用戶讓從節(jié)點(diǎn)slave連接,并賦予從節(jié)點(diǎn)同步主節(jié)點(diǎn)數(shù)據(jù)庫的權(quán)限,
grant replication slave on *.* to 'mysqlsync'@'slave節(jié)點(diǎn)ip' identified by '123456';
檢查主節(jié)點(diǎn)狀態(tài):show master status;
image.png

2.配置從節(jié)點(diǎn)(slave)

測試slave連接master數(shù)據(jù)庫:
mysql –h 主節(jié)點(diǎn)ip或者h(yuǎn)osts中配置的名字 –u 用戶名 –p密碼 –P端口
例:mysql -h mysqlmaster -u mysqlsync -pmysqlsync -P 3306
注意:-p和密碼直接不能有空格

修改my.cnf配置文件,內(nèi)容如下:

[mysqld]
#保證該id唯一
server-id=15
#中繼日志
relay_log=relay-log
#設(shè)置只讀,開啟讀寫分離
read_only=ON

展示如下:

image.png

重啟mysql服務(wù),systemctl restart mysqld.service
并綁定master節(jié)點(diǎn):change master to master_host='192.168.56.14',master_user='mysqlsync',master_password='mysqlsync';
開啟從節(jié)點(diǎn)服務(wù)。使用命令show slave status\G;并查看從節(jié)點(diǎn)服務(wù)狀態(tài),如果Slave_IO_RunningSlave_SQL_Running的狀態(tài)都為YES,則從節(jié)點(diǎn)服務(wù)開啟成功。查詢結(jié)果如圖所示。
使用命令開啟start slave;
查看show slave status\G;
image.png

  • 4.測試,在master新建數(shù)據(jù)庫test,導(dǎo)入或者新建表,刷新slave數(shù)據(jù)庫,數(shù)據(jù)庫及表都同步過去了

4.保證從庫可以同步主庫數(shù)據(jù),且存庫是只讀的

在slave庫中需要設(shè)置set global read_only=1;并將root設(shè)置為只能本地連接,新創(chuàng)建slave用戶去同步主庫。
Slave用戶只授予所有庫的查詢權(quán)限:
show grants;展示當(dāng)前用戶的所有權(quán)限
show grants for 'username'@'host'; 查看某個(gè)用戶的所有權(quán)限
grant select on *.* to 'subslave'@'%'; 授予subslave用戶所有庫和表的查詢權(quán)限
grant all priveleges on mysql.* to ‘subslave’@’%’授予subslave用戶mysql庫中所有表的操作權(quán)限。
Revoke all privileges on databasename.tablename from 'username'@'host'; 回收權(quán)限。
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');設(shè)置密碼

5.主從的一些命令使用:

1.主:

show master status; 查看主庫狀態(tài)信息
reset master; 清除binlog日志信息
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }用于刪除列于在指定的日志或日期之前的日志索引中的所有二進(jìn)制日志。這些日志也會(huì)從記錄在日志索引文件中的清單中被刪除,這樣被給定的日志成為第一個(gè)
PURGE BINARY LOGS TO 'mysql-bin.000002';刪除mysql-bin.000002之前的日志(不包括mysql-bin.000002)
PURGE BINARY LOGS BEFORE '2017-12-15 11:53:59';刪除2017-12-15 11:53:59時(shí)間點(diǎn)之前的日志

2.從:

start slave;    開啟從庫
show slave status\G;    查詢slave狀態(tài)信息,可以觀察binlog文件,relaylog文件,io是否正常等信息
stop slave; 停止從庫
reset slave;    relay log日志清除

問題:
若見到以下倆個(gè)有一個(gè)為no


image.png

可采用如下解決方式:(一般情況下方式1就可解決)

  • 解決方式1
    1.程序可能在slave上進(jìn)行了寫操作
    2.也可能是slave機(jī)器重起后,事務(wù)回滾造成的.
    一般是事務(wù)回滾造成的:
    stop slave;
    set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    start slave;
  • 解決方式2
    首先停掉Slave服務(wù):slave stop,再到主服務(wù)器上查看主機(jī)狀態(tài):記錄File和Position對應(yīng)的值。
    進(jìn)入master,show master status;就可以看到值
    然后到slave服務(wù)器上執(zhí)行手動(dòng)同步:
change master to
  master_host='master_ip',
  master_user='user',
  master_password='pwd',
  master_port=3306,
  master_log_file='bin.000130',  // 配置bin_log日志
  master_log_pos=33622483 ;  // 配置bin_log日志的位置

可能會(huì)報(bào)錯(cuò):log_file 不存在,這是需要查看從數(shù)據(jù)庫服務(wù)器中mysql的 log文件目錄下,master_log_file 是否存在? 不存在時(shí),直接從主數(shù)據(jù)服務(wù)器中復(fù)制過來即可。

6.總結(jié)

剛開始學(xué)習(xí)mysql主從搭建以為特別難,故自己搭建虛擬機(jī)安裝mysql并配置主從,但是發(fā)現(xiàn)配置主從不是特別麻煩。這里建議使用docker搭建mysql主從,應(yīng)該會(huì)方便不少,如果學(xué)習(xí)的,可以走一遍安裝配置流程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容