碎碎念
mysql
慣例碎碎念。linux
好久以前就作過mysql的部分應用架構,包括主從複製和集羣等,一直沒有造成博客記錄下來,雖然網上也有不少的相關資料,可是出於加深記憶,仍是把本身的操做步驟和截圖一步步記錄下來,回頭忘了也能夠回顧,固然,也但願有小夥伴能獲得幫助。sql
環境vim
一臺裝有vsphere6.5的宿主機,和宿主機上的centos虛擬機若干。windows
一、vsphere 6.5centos
二、centos 7服務器
三、mysql 5.7架構
四、navicat 8socket
五、windows 10tcp
安裝mysql
一、yum方式安裝
# 進入文件夾
cd /usr/local
# 建立你本身的文件夾
mkdir zoro zoro/setup
# 進入建立的文件夾
cd zoro/setup
# 下載官方yum源包
wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
# 賦予執行權限
chmod +x mysql57-community-release-el7-11.noarch.rpm
# 本地安裝,一路Y就好了
yum localinstall mysql57-community-release-el7-11.noarch.rpm
# 啓動
systemctl start mysqld
# 獲取臨時密碼
grep 'temporary password' /var/log/mysqld.log
# 登陸mysql
mysql -uroot -pYourPwd
# 修改密碼 OR 配置等,你想幹嗎就幹嗎
二、二進制安裝
# 進入文件夾
cd /usr/local
# 建立你本身的文件夾
mkdir zoro zoro/setup
# 進入建立的文件夾
cd zoro/setup
# 下載二級制包,地址二選一
# 官網鏡像,跟烏龜似的
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
# 國內鏡像,速度槓槓的
wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
# 解壓縮
tar zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
# 移動並重命名到指定地方,須要先建立目錄
mkdir /usr/local/server
mv mysql-5.7.21-linux-glibc2.12-x86_64 /usr/local/server/mysql
# 進入mysql 目錄
cd /usr/local/server/mysql
# 建立data目錄
mkdir /data /data/db /data/db/mysql
# 檢查和建立用戶
cat /etc/group | grep mysql
# 如過查無結果,則建立mysql用戶
groupadd mysql
useradd -r -g mysql mysql
#科普1:-g, --gid GROUP 新帳戶主組的名稱或 ID
#科普2:-r, --system 建立一個系統帳戶,不可用於登陸
# 賦權
chown -R mysql:mysql /data/db/mysql
chmod 750 /data/db/mysql
# 執行安裝
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/server/mysql --datadir=/data/db/mysql
# 記錄屏幕中的臨時密碼
A temporary password is generated for root@localhost: wmujowe!68H
# 若是basedir和datadir修改過,須要先修改./support-files/mysql.server
vim ./support-files/mysql.server
#填入
basedir=/usr/local/server/mysql
datadir=/data/db/mysql
# 複製服務腳本
cp -a ./support-files/mysql.server /etc/init.d/mysqld
# 編輯配置文件,將data目錄等參數修正
# 一、若是如下兩個目錄不在上面賦權的範圍內,也要從新賦權,不然沒法啓動
log-error=/var/log/mysql/mariadb.log
pid-file=/var/run/mysql/mariadb.pid
chown -R mysql:mysql /var/log/mysql
# 二、配置文件加入[mysql]節點,用以客戶端鏈接
[mysql]
socket=/data/db/mysql/mysql.sock
# 加入環境變量
export PATH=$PATH:/usr/local/server/mysql/bin
# 啓動mysql
service mysqld start
# 接下來的步驟就和yum方式相似了,再也不贅述
mysql -uroot -pYouPwd
...
三、其餘說明
除了上述兩種方式外,還有源碼安裝等方式,若有興趣,請自行研究。
yum方式安裝相對來講比較省事,可是因爲下載鏡像在國外,通常速度較慢,若是不能接受的話建議採用其餘方式。
二進制安裝稍微繁瑣一點,建議有Linux經驗的小夥伴採用。
Tips
①修改密碼
提供關於修改密碼的命令
# 登陸
mysql -uroot -pYourPwd
# 第一種方式
set password=password(YourNewPwd);
# 第二種方式
use mysql;
update user set authentication_string=password(YourNewPwd) where User='root';
②移動data目錄
默認的mysqldata目錄在於/var/lib/mysql,若是須要移動目錄,能夠參考下列操做
# 關閉mysql
systemctl stop mysqld
# 建立你本身的目錄
mkdir /data/db
# 移動mysql文件夾
mv /var/lib/mysql /data/db
# 更改權限
chown -R mysql:mysql /data/db/mysql
# 啓動mysql
sysctemctl start mysqld
# 若是遇到啓動問題,通常先檢查配置文件是否有錯
# 若是確認配置文件沒錯,還啓動不了,能夠嘗試下面的設置
vim /etc/selinux/config
# 設置 SELINUX=disabled
# 保存重啓
reboot
# 再次嘗試啓動mysql
sysctemctl start mysqld
Tips:
關於selinux這裏不作贅述,有興趣的能夠去查閱資料瞭解
④建立用戶和賦權
提供關於建立用戶和賦權的基礎命令,如需瞭解詳細內容,請參考官網
Create user ‘user’@’host’ identified by ‘YourPwd’;
# 賦予權限(原則上是最小權限賦予,此處賦予db.tables的所有權限)
Grant all on db.tables to user;
flush privileges;
⑤防火牆開放端口
若是你開啓了防火牆,須要開放默認的3306端口,不然外網沒法訪問
# 查看防火牆狀態
systemctl status firewalld
# 若是防火牆開啓,須要開放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重啓防火牆
systemctl restart firewalld
主從配置
前提條件,分別在兩臺服務器上安裝msyql服務
IP :192.168.1.246(centOS7 + mysql) master
IP : 192.168.1.249(centOS7 + mysql) slave
一、master配置
這裏不區分庫,針對全部的庫都作主從複製,若是須要特定庫作主從複製的,請翻閱四、其餘說明
vim /etc/my.cnf
log-bin=mysql-bin
server-id=246
log_bin_trust_function_creators=1
重啓mysql,並登錄mysql進行操做
systemctl restart mysqld
mysql -uroot -pYourPwd
#建立同步帳號,賦予權限,這裏進行演示,不作權限限制和ip限制,請知悉
mysqlGRANT FILE ON *.* TO 'slave'@'%' IDENTIFIED BY 'YourSlavePwd';
mysqlGRANT replication slave on *.* to ’slave’@’%’ identified by 'YourSlavePwd'
mysqlflush privileges;
#查看主服務器狀態,並記錄下狀態
mysql show master status;
二、slave配置
vim /etc/my.cnf
read_only=1
log-bin=mysql-bin
server-id=249
log_bin_trust_function_creators=1
重啓mysql,並登錄mysql進行操做
systemctl restart mysqld
mysql -uroot -pYourPwd
# 配置master,並開啓同步
mysql change master to master_host='192.168.1.246',master_user='slave',master_password='YourSlavePwd', master_log_file='mysql-bin.000033',master_log_pos=57883;
# 開啓同步
mysql start slave;
# 查看同步狀態
mysql show slave status\G;
# 若是出現如下兩個Yes,證實同步成功,若是出現問題,請翻閱`四、其餘說明`
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
三、驗證
一、用Navicat分別鏈接主庫和從庫
二、在主庫對某些記錄進行修改
三、查看從庫是否同步了主庫的修改
四、其餘說明
這裏分紅兩部分,一部分針對主從複製中,只要求同步部分庫的配置,另外一部分記錄主從不一樣步的解決方法。
①部分同步
須要修改my.cnf的配置文件,包括replicate-ignore-db和replicate-ignore-db以及binlog-do-db和binlog-ignore-db等參數配合。
具體配置說明請參考這裏
②主從不一樣步解決
1、忽略錯誤後,繼續同步。(該方法適用於主從庫數據相差不大,或者要求數據能夠不徹底統一的狀況,數據要求不嚴格的狀況。)
1)、中止同步
mysqlstop slave;
2)、設置參數
mysqlset global sql_slave_skip_counter =1;
3)、啓動同步並查看
start slave;
mysql show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
2、從新作主從,徹底同步。(該方法適用於主從庫數據相差較大,或者要求數據徹底統一的狀況。)
1)、進入主庫,進行鎖表,防止數據寫入。注意:該處是鎖定爲只讀狀態,語句不區分大小寫
mysql flush tables with read lock;
2)、進行數據備份並解鎖
mysqldump -uroot -pYouPwd YourDB bak.sql;
mysql UNLOCK TABLES;
3)、查看master 狀態並記錄
mysql show master status;
4)、把mysql備份文件傳到從庫機器,進行數據恢復
5)、中止從庫的狀態
mysql stop slave;
6)、從庫執行mysql命令,導入數據備份
7)、設置從庫同步,具體參數請根據master status填寫
change master to master_host = '192.168.1.246', master_user = 'slave', master_port=3306, master_password='YourSalvePwd', master_log_file = 'mysqld-bin.000035', master_log_pos=120;
8)、從新開啓從同步
mysql start slave;
9)、查看同步狀態
mysql show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes