一、軟件安裝部署(單機)
01.目錄規(guī)劃
MySQL版本:5.7.26
安裝方式:二進制安裝
部署平臺:CentOS 7.6
主機IP地址:192.168.66.57
下載地址:
https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
軟件目錄:
mkdir /opt/src
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
02.數(shù)據(jù)目錄
mkdir -p /data/mysql
03.創(chuàng)建管理MySQL的用戶
以為我們采用的是二進制安裝,系統(tǒng)不會自動mysql用戶
useradd -s /sbin/nologin -M mysql
04.給mysql用戶授權(quán)
chown -R mysql:mysql /data/mysql/
chown -R mysql:mysql /opt/mysql
05.解壓源碼包
cd /opt/src
tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
#創(chuàng)建軟連接
ln -s /opt/src/mysql-5.7.20-linux-glibc2.12-x86_64 /opt/mysql
06.設(shè)置環(huán)境變量
vim /etc/profile
export PATH=/opt/mysql/bin:$PATH
source /etc/profile
07.清除遺留環(huán)境
rpm -qa |grep mariadb
yum -y remove mariadb-libs-5.5.56-2.el7.x86_64
rm -rf /etc/my.cnf
08.初始化數(shù)據(jù)庫
mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/mysql
vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/opt/mysql
datadir=/data/mysql
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
09.配置啟動腳本
#默認(rèn)啟動腳本
/opt/mysql/support-files/mysql.server start
#讓service管理MySQL
cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld
#然systemd管理MySQL腳本
vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
10.啟動MySQL
systemctl start mysqld.service
mysql -V
mysql -uroot -p
11.設(shè)置MySQL的密碼
mysqladmin -uroot -p password 123456
==-單節(jié)點腳本編寫(二進制包安裝)-==
#!/bin/bash
# 時間:2021年5月20日17點04分
# 項目:單主機二進制部署mysql
# 1.創(chuàng)建目錄
mkdir -p /data/mysql &>/dev/null
# 2.創(chuàng)建用戶
useradd -s /sbin/nologin -M mysql &>/dev/null
# 3.下載并且解壓軟件包
mkdir -p /opt/src
cd /opt/src/
if [ ! -f "mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz" ];then
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
elif [ ! -d "mysql-5.7.20-linux-glibc2.12-x86_64" ];then
tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
else
echo "already exists"
fi
# 4.創(chuàng)建軟鏈接
ln -s `pwd`/mysql-5.7.20-linux-glibc2.12-x86_64 /opt/mysql &>/dev/null
# 5.配置環(huán)境變量
cat >> /etc/profile << EOF
export PATH=/opt/mysql/bin:\$PATH
EOF
source /etc/profile
sleep 3
# 6.給目錄授權(quán)
chown -R mysql:mysql /data/mysql/
chown -R mysql:mysql /opt/mysql
# 7.清理環(huán)境
yum -y remove `rpm -qa |grep mariadb` &>/dev/null
# 8.初始化數(shù)據(jù)庫——沒有密碼
mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/data/mysql &>/dev/null
# 9.編寫配置文件
cat >/etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/opt/mysql
datadir=/data/mysql
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
EOF
# 10.配置啟動腳本
cat > /etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF
# 11.啟動mysql
systemctl daemon-reload
systemctl start mysqld.service
systemctl status mysqld.service
mysql -V
# 11.密碼修改
# mysqladmin -uroot -p password 123456
# ================================腳本結(jié)束================================
二、主從復(fù)制
01.簡介
1.基于二進制日志復(fù)制的
2.主庫的修改操作會記錄二進制日志
3.從庫會請求新的二進制日志并回放,最終達到主從數(shù)據(jù)同步
4.主從復(fù)制核心功能:
輔助備份,處理物理損壞
擴展新型的架構(gòu):高可用,高性能,分布式架構(gòu)等
02.準(zhǔn)備多個實例
準(zhǔn)備多個實例目錄
mkdir -p /data/330{7,8,9}/data
準(zhǔn)備配置文件
cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/opt/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/mysql-bin
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/opt/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/mysql-bin
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/opt/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/mysql-bin
EOF
初始化三套數(shù)據(jù)
mv /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/opt/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/opt/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/opt/mysql
systemd管理多實例
cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service
vim mysqld3307.service
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
vim mysqld3308.service
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
vim mysqld3309.service
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
授權(quán)
chown -R mysql.mysql /data/*
啟動
systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service
驗證多實例
netstat -lnp|grep 330
mysql -S /data/3307/mysql.sock -e "select @@server_id"
mysql -S /data/3308/mysql.sock -e "select @@server_id"
mysql -S /data/3309/mysql.sock -e "select @@server_id"
03.復(fù)制流程
(1) 2個或以上的數(shù)據(jù)庫實例
(2) 主庫需要開啟二進制日志
(3) server_id要不同,區(qū)分不同的節(jié)點
(4) 主庫需要建立專用的復(fù)制用戶 (replication slave)
(5) 從庫應(yīng)該通過備份主庫,恢復(fù)的方法進行"補課"
(6) 人為告訴從庫一些復(fù)制信息(ip port user pass,二進制日志起點)
(7) 從庫應(yīng)該開啟專門的復(fù)制線程
04.搭建主從復(fù)制
檢查主庫是否開啟二進制日志,節(jié)點(實例)的service_id是否一樣
egrep "log_bin|server_id" /data/330*/my.cnf
主庫創(chuàng)建復(fù)制用戶
mysql -uroot -S /data/3307/mysql.sock -e "grant replication slave on *.* to repl@'192.168.66.%' identified by '123'"
備份主庫并恢復(fù)到從庫
mysqldump -S /data/3307/mysql.sock -A --master-data=2 --single-transaction -R --triggers >/tmp/full.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=653;
mysql -S /data/3308/mysql.sock
mysql>source /backup/full.sql
告訴從庫主庫的信息
#查看命令幫助
help change master to
[root@db01 ~]# mysql -S /data/3308/mysql.sock
CHANGE MASTER TO
MASTER_HOST='192.168.66.57',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3307,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=2987,
MASTER_CONNECT_RETRY=10;
從庫開啟主從專用線程
start slave ;
檢查復(fù)制狀態(tài)
mysql>show slave status \G
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
05.寫入數(shù)據(jù)測試
在主庫創(chuàng)建庫,新建一張表格,插入數(shù)據(jù),然后在從庫這邊查看數(shù)據(jù)庫信息,發(fā)現(xiàn)從庫完全將主庫的信息備份到自己本地。