Linux_服務管理—mysql多實例部署

mysql多實例部署

1. 手動配置

#下載二進制格式的mysql軟件包
[root@node01-linux ~]# cd /usr/src/
[root@node01-linux src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
[root@node01-linux src]# ls
debug  kernels  mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz

#創建用戶
[root@node01-Linux ~]# useradd -r -M -s /sbin/nologin -u 306 mysql

#解壓
[root@node01-Linux ~]# tar xf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

#軟鏈接
[root@node01-Linux local]# ln -s mysql-5.7.30-linux-glibc2.12-x86_64/ mysql

#修改屬組
[root@node01-Linux local]# chown -R mysql.mysql mysql*

#環境變量
[root@node01-Linux bin]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@node01-Linux bin]# . /etc/profile.d/mysql.sh

#創建數據庫目錄
[root@node01-Linux ~]# mkdir /opt/mysqldata
[root@node01-Linux ~]# mkdir /opt/mysqldata/{3306,3307,3308}

[root@node01-Linux ~]# chown -R mysql.mysql /opt/mysqldata/

#初始化各實例
[root@node01-Linux ~]# mysqld --initialize --user=mysql --datadir=/opt/mysqldata/3306
[root@node01-Linux ~]# echo '<FqITI!7of*F' > 3306_pw

[root@node01-Linux ~]# mysqld --initialize --user=mysql --datadir=/opt/mysqldata/3307
[root@node01-Linux ~]# echo 'iPUopmiu4J)o' > 3307_pw

[root@node01-Linux ~]# mysqld --initialize --user=mysql --datadir=/opt/mysqldata/3308
[root@node01-Linux ~]# echo 'R(j7&S<<mnRt' > 3308_pw

#安裝perl
[root@node01-Linux ~]# yum -y install perl

#配置配置文件/etc/my.cnf
[root@node01-Linux ~]# vim /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
socket = /tmp/mysql3306.sock
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin

[mysqld3306]
datadir = /opt/data/3306
port = 3306
socket = /tmp/mysql3306.sock
pid-file = /opt/data/3306/mysql_3306.pid
log-error=/var/log/mysql/3306.log

[mysqld3307]
datadir = /opt/data/3307
port = 3307
socket = /tmp/mysql3307.sock
pid-file = /opt/data/3307/mysql_3307.pid
log-error=/var/log/mysql/3307.log

[mysqld3308]
datadir = /opt/data/3308
port = 3308
socket = /tmp/mysql3308.sock
pid-file = /opt/data/3308/mysql_3308.pid
log-error=/var/log/mysql/3308.log

[root@node01-Linux ~]# chown -R mysql.mysql /var/log/mysql/

#啓動各實例
[root@node01-Linux ~]# mysqld_multi start 3306
[root@node01-Linux ~]# mysqld_multi start 3307
[root@node01-Linux ~]# mysqld_multi start 3308
[root@node01-Linux ~]# ss -antl

#初始化密碼
[root@node01-Linux ~]# mysql -uroot -p'<FqITI!7of*F' -S /tmp/mysql3306.sock --connect-expired-passwor -e 'set password = password("mysql123456");'

[root@node01-Linux ~]# mysql -uroot -p'iPUopmiu4J)o' -S /tmp/mysql3307.sock --connect-expired-passwor -e 'set password = password("mysql123456");'

[root@node01-Linux ~]# mysql -uroot -p'R(j7&S<<mnRt' -S /tmp/mysql3308.sock --connect-expired-passwor -e 'set password = password("mysql123456");'

2. 腳本部署

#!/bin/bash

#yum源
repo=$(ls /etc/yum.repos.d|wc -l)
if [ $repo -eq 0 ];then
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
    sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
fi

#安裝
yum -y install perl &>/dev/null

#變量
install_dir=/usr/local
soft=mysql-5.7.30-linux-glibc2.12-x86_64
datadir=/opt/data
read -p "請輸入創建的實例數:" count
port=3306

#創建用戶
id mysql &>/dev/null
if [ $? -ne 0 ];then
    useradd -r -M -s /sbin/nologin -u 306 mysql
fi

#解壓
if [ ! -d $install_dir/$soft ];then
    tar xf ${soft}.tar.gz -C /usr/local/
fi

#建立軟連接
ln -s $install_dir/$soft/ $install_dir/mysql

#修改屬組
chown -R mysql.mysql $install_dir/mysql*

#環境變量
echo "export PATH=$install_dir/mysql/bin:\$PATH" > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
cat > /etc/my.cnf <<EOF
[mysqld_multi]
mysqld = $install_dir/mysql/bin/mysqld_safe
mysqladmin = $install_dir/mysql/bin/mysqladmin
EOF

#創建數據庫日誌目錄
mkdir -p /var/log/mysql
chown -R mysql.mysql /var/log/mysql
#初始化各實例、創建數據庫目錄
for i in $(seq $count);do
    mkdir -p $datadir/$port
    chown -R mysql.mysql $datadir
    /usr/local/mysql/bin/mysqld --initialize --datadir=$datadir/$port --user=mysql &>/tmp/${port}_tpf
    tenpw=$(grep 'password' /tmp/${port}_tpf|awk '{print $NF}')

#配置配置文件/etc/my.cnf
cat >> /etc/my.cnf <<EOF

[mysqld$port]
datadir = $datadir/$port
port = $port
socket = /tmp/mysql${port}.sock
pid-file = $datadir/$port/mysql_${port}.pid
log-error=/var/log/mysql/${port}.log
EOF

##啓動各實例、#初始化密碼
    $install_dir/mysql/bin/mysqld_multi start $port
    read -p "請輸入新的數據庫密碼:" password
    $install_dir/mysql/bin/mysql -uroot -p$tenpw -S /tmp/mysql${port}.sock -e "set password=password('$password');" --connect-expired-password
    $install_dir/mysql/bin/mysql -uroot -p$password -S /tmp/mysql${port}.sock -e 'show databases;' &>/dev/null
    if [ $? -eq 0 ];then
        echo "您的數據庫密碼修改成功"
    else
        echo "Error your operation fault"
    fi
    let port++
done
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章