04.MySQL集群

一、軟件安裝部署(單機)

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)從庫完全將主庫的信息備份到自己本地。

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

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

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