一、CentOS7下安裝mysql8
1.1 安裝前清理工作
rpm -pa | grep mysql
查找出安裝的mysql相關(guān)軟件包依賴包,
yum remove mysql-xxx-xxx-
刪除找到的軟件依賴包
find / -name mysql
查找mysql相關(guān)目錄,
rm -rf /var/lib/mysql
刪除目錄
1.2 安裝mysql8
1.2.1 先去官網(wǎng)下載mysql的repo源并安裝,
mysql repo下載地址

1.2.2 下載好的mysql repo文件上傳到Centos,安裝 yum repo文件并更新 yum 緩存
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
執(zhí)行后在 /etc/yum.repos.d/ 目錄下生成兩個repo文件

更新 yum 命令
yum clean all
yum makecache
1.2.3 使用 yum安裝mysql
yum install mysql-community-server
安裝mysql
1.2.4 配置my.cnf
lower_case_table_names = 1 #是否大小寫敏感,1為非大小寫敏感,默認(rèn)0大小寫敏感,mysql8在第一次啟動就要配置好,后面更改了就會報錯
mysql8 中大小寫敏感配置要在第一次啟動前配置好
systemctl start mysqld.service
啟動mysql
1.2.5 修改初始密碼
cat /var/log/mysqld.log | grep password
找到默認(rèn)密碼
mysql -u root -p
使用默認(rèn)密碼登錄
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
修改初始密碼
SHOW GRANTS FOR `root`; -- 查看用戶權(quán)限
CREATE USER `root`@`%` IDENTIFIED BY '1qaz@WSX'; -- 創(chuàng)建用戶
GRANT ALL ON *.* TO `root`@`%` WITH GRANT OPTION;-- 修改用戶權(quán)限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz@WSX'; -- 修改用戶密碼校驗方式
以上可能會用到的用戶權(quán)限相關(guān)sql
3. mysql主主負(fù)載
3.1 部署好兩臺相同的mysql服務(wù)
假設(shè)
服務(wù)器A:192.168.1.1
服務(wù)器B:192.168.1.2
CREATE USER 'sync'@'192.168.1.2' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.1.2';
在服務(wù)器A上創(chuàng)建同步賬號,并添加權(quán)限
CREATE USER 'sync'@'192.168.1.1' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.1.1';
在服務(wù)器B上創(chuàng)建同步賬號,并添加權(quán)限
3.2 配置my.cnf
[mysqld]
user = mysql #mysql使用的用戶名
bind_address = 0.0.0.0 #監(jiān)聽IP,此處不能用127.0.0.1因為需要外部機(jī)器訪問
default_authentication_plugin = mysql_native_password
server-id = 2 #server-id,必須是大于0的一個整數(shù),兩臺服務(wù)器不能設(shè)置一樣,一般一個設(shè)1,另一個設(shè)2就可以
log_bin = mysql-bin #二進(jìn)制日志名,最終會在/usr/local/mysql/data/中以mysql-bin.000001這種文件名形式存在,擴(kuò)展名是一個編號
binlog_format = mixed #混合型日志格式,具體含義可自行查詢
binlog_expire_logs_seconds = 604800 #日志過期時間
sync-binlog = 1
innodb_flush_log_at_trx_commit = 1
# Master DB #
#需要同步的數(shù)據(jù)庫用多個binlog-do-db,不要寫在一行用逗號分隔,這種情況可能會導(dǎo)致數(shù)據(jù)庫同步狀態(tài)一切正常,就是同步不了,日志也沒有任何問題,根據(jù)實驗發(fā)現(xiàn),如果寫成binlog-do-db = database1,database2
在使用show master status以及show slave status時與下面設(shè)置方式完全一樣,但就是無法同步
binlog-do-db = sjy #需要同步的數(shù)據(jù)庫
binlog-do-db = sjy_test #需要同步的數(shù)據(jù)庫
#由于兩個服務(wù)器都可以寫數(shù)據(jù),為了防止自增的key沖突,需要設(shè)置下面兩個,increment是每次增長數(shù),兩臺服務(wù)器設(shè)為2即可,offset是起始偏移,一個服務(wù)器設(shè)置為1,另一個設(shè)置為2,這樣自增id在服務(wù)器A上是1、3、5這樣,在服務(wù)器B上就是2、4、6不會產(chǎn)生沖突
auto-increment-increment = 2
auto-increment-offset = 2
# Slave DB #
replicate-do-db = sjy #需要從其他服務(wù)器同步過來的數(shù)據(jù)庫名
replicate-do-db = sjy_test
relay_log = relay-bin #中繼日志名稱
lower_case_table_names = 1 #是否大小寫敏感,1為非大小寫敏感,默認(rèn)0大小寫敏感,mysql8在第一次啟動就要配置好,后面更改了就會報錯
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
server-id 兩臺服務(wù)器設(shè)置不同的值,一個設(shè)置1,一個設(shè)置2
auto-increment-increment 主鍵增長數(shù),兩臺設(shè)置相同值
auto-increment-offset 偏移量設(shè)置不同值,一個設(shè)置1,一個設(shè)置2
3.3 配置主從服務(wù)信息,開啟服務(wù)
服務(wù)器A為主服務(wù)時中執(zhí)行
SHOW MASTER STATUS\G
查看主服務(wù)信息
*************************** 1. row ***************************
File: mysql-bin.000004
Position: 2165741
Binlog_Do_DB: sjy,sjy_test
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
記下File和Position值,在B服務(wù)器上設(shè)置,
CHANGE MASTER TO MASTER_HOST='192.168.100.1',MASTER_USER='sync',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=2165741;
MASTER_HOST 主服務(wù)器IP,即為對方服務(wù)器IP
MASTER_USER 我們創(chuàng)建的同步用戶
MASTER_PASSWORD 用戶密碼
MASTER_LOG_FILE 主服務(wù)器上查到的日志文件名
MASTER_LOG_POS 主服務(wù)器上查到的日志位置
同理,在服務(wù)器B上執(zhí)行SHOW MASTER STATUS,把信息配置到服務(wù)器A上。
start slave;
兩個服務(wù)器分別執(zhí)行,開啟slave。
3.4 檢驗開啟狀態(tài)
show slave status\G
分別在兩臺服務(wù)器上執(zhí)行,查看 Slave_IO_Running 和 Slave_SQL_Running 這兩個值是否都為YES;
在服務(wù)器A中修改數(shù)據(jù),數(shù)據(jù)庫B是否數(shù)據(jù)一致,在數(shù)據(jù)庫B中修改數(shù)據(jù),數(shù)據(jù)庫A中是否數(shù)據(jù)一致。