脚本说明
1.此脚本安装的mysql版本为5.7.38,只需要一台虚拟机即可执行脚本。
2.因为原/etc/my.cnf的配置文件被修改名字,所以原本的3306端口的mysql无法启用。
3.创建的mysql多实例的端口分别为3307、3308、3309,进入对应的命令分别为:
mysql -S /data/3307/mysql.sock
mysql -S /data/3308/mysql.sock
mysql -S /data/3309/mysql.sock
登录多实例mysql的方式是使用对应端口的mysql.sock文件进行登录
4.这一点非常重要!!!
执行脚本的方式是
source +脚本名字
例如设置该脚本的文件名为mysql.sh,执行脚本的命令则是
source mysql.sh
---------------------------------------------------------------------------------------------------------------------------------
执行的时候应该不会报错,我自己在纯净的虚拟机上测试过3次,都是可以运行脚本之后可以直接登录
---------------------------------------------------------------------------------------------------------------------------------
脚本内容
#!/bin/bash
ip=$(ifconfig |sed -n "2p" |awk {'print$2'})
yum -y install wget &>/dev/null
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
mdb=$(rpm -qa | grep mariadb)
rpm -e --nodeps $mdb
mkdir -p /data/mysqldata
mkdir /data/binlog
mkdir /var/log/mysql
mkdir /usr/local/mysql
dirs=$(find / -name "mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz" |awk -F "mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz" '{print$1}')
cd $dirs
tar -zvxf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
#如果需要删除二进制安装包,可以把下面红色这句脚本语句开头的"#"号删除
#rm -rf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
cd mysql-5.7.38-linux-glibc2.12-x86_64
nu=$(echo $?)
if [ $nu -eq 0 ];then
echo "解压成功"
cd $dirs
mv mysql-5.7.38-linux-glibc2.12-x86_64/* /usr/local/mysql/
rm -rf mysql-5.7.38-linux-glibc2.12-x86_64
else
echo "解压失败"
fi
useradd mysql -s /sbin/nologin
chown mysql:mysql -R /usr/local/mysql
chown mysql:mysql -R /var/log/mysql
chown mysql:mysql -R /data/mysqldata
chown mysql:mysql -R /data/binlog
echo "[mysql]
default-character-set=utf8
socket=/tmp/mysql.sock
[mysqld]
skip-name-resolve
port = 3306
basedir=/usr/local/mysql
datadir=/data/mysqldata
log-error=/var/log/mysql/error.log
user=mysql
server_id=6
character-set-server=utf8
#开启binlog日志
log_bin=/data/binlog/mysql-bin
#开启gtid
gtid-mode=on
enforce-gtid-consistency=true
#慢日志查询开启,2秒写入
slow_query_log = on
long_query_time = 2
slow-query-log-file = /var/log/mysql/slow.log" > /etc/my.cnf
echo 'export PATH=/usr/local/mysql/bin:$PATH '>> /etc/profile
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld && chmod a+x /etc/init.d/mysqld
source /etc/profile
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata
/etc/init.d/mysqld start
sleep 1
mv /etc/my.cnf /etc/my.cnf.bak
mkdir /data/33{07..9}/data -p
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data
cat >/data/3307/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
port=3307
log-error=/data/3307/mysql.log
log_bin=/data/3307/mysql-bin
binlog_format=row
skip-name-resolve
server-id=7
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
cat >/data/3308/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3308/data
port=3308
socket=/data/3308/mysql.sock
log-error=/data/3308/mysql.log
log_bin=/data/3308/mysql-bin
binlog_format=row
skip-name-resolve
server-id=8
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
cat >/data/3309/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
port=3309
log-error=/data/3309/mysql.log
log_bin=/data/3309/mysql-bin
binlog_format=row
skip-name-resolve
server-id=9
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
cat >/etc/systemd/system/mysqld3307.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=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF
cat >/etc/systemd/system/mysqld3308.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=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF
cat >/etc/systemd/system/mysqld3309.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=/usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF
chown -R mysql.mysql /data/*
systemctl start mysqld3307
sleep 2
systemctl start mysqld3308
sleep 2
systemctl start mysqld3309
sleep 2
mysql -S /data/3307/mysql.sock -e "grant replication slave on *.* to repl@'%' identified by '123';"
mysql -S /data/3307/mysql.sock -e "grant all on *.* to root@'%' identified by '123' with grant option;"
sleep 2
mysql -S /data/3308/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='$ip', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='123';"
mysql -S /data/3308/mysql.sock -e "start slave;"
mysql -S /data/3308/mysql.sock -e "show slave status\G"
sleep 2
mysql -S /data/3309/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='$ip', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='123';"
mysql -S /data/3309/mysql.sock -e "start slave;"
mysql -S /data/3309/mysql.sock -e "show slave status\G"
sleep 1
mysql -S /data/3308/mysql.sock -e "show slave status\G"|grep Running
sleep 1
mysql -S /data/3309/mysql.sock -e "show slave status\G"|grep Running