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安裝包版本:

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)的問題):

分別使用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)信息如下:

-
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配置(跳過密碼檢查)

現(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ò)誤:


一個(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- 兩臺(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的修改生效
- 兩臺(tái)主機(jī)都關(guān)閉防火墻和SELinux服務(wù)
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é)果如下:

退出,重啟mysql服務(wù),
systemctl restart mysqld.service登錄進(jìn)mysql,檢查binlog是否開啟,on為開啟,命令
show variables like '%log_bin%';如圖所示:
在主節(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;

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
展示如下:

重啟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_Running和Slave_SQL_Running的狀態(tài)都為YES,則從節(jié)點(diǎn)服務(wù)開啟成功。查詢結(jié)果如圖所示。使用命令開啟
start slave;查看
show slave status\G;
- 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

可采用如下解決方式:(一般情況下方式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í)的,可以走一遍安裝配置流程。



