两台虚拟机 db01 db02
每台创建四个Mysql实例 3307 3308 3309 3310
数据目录:/data/
pkill mysqlrm -rf /data/*mv /etc/my.cnf /etc/my.cnf.bak
服务器下载链接: https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
[root@localhost local]# cd /usr/local[root@localhost local]# wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
命令:mkdir -p /server/tools
[root@localhost local]# mkdir -p /server/tools
命令:mkdir -p /application
[root@localhost local]# mkdir -p /application
[root@localhost local]# tar -xf /usr/local/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz

命令:mv mysql-5.7.29-linux-glibc2.12-x86_64 /application/mysql
[root@localhost local]# mv /usr/local/mysql-5.7.29-linux-glibc2.12-x86_64 /application/mysql
服务器目录规划图:
暂时直接在主机上创建目录/data(可以根据需要决定是否需要挂载磁盘)
2.5.1、添加磁盘新卷:略
2.5.2、查询服务器磁盘列表:
命令:fdisk -l
2.5.3、格式化需要挂载的新卷: /dev/sdc
命令:mkfs.xfs /dev/sdc
2.5.4、创建挂载目录
命令:mkdir /data
2.5.5、查询新磁盘的UUID
命令:blkid
2.5.6、添加磁盘自动挂载:
vim /etc/fstabUUID="ba1ec30-e251-4ded-bc12-2d940f938dd5" /data xfs defaults 0 0
2.5.7、进行磁盘挂载
mount -adf -h
mkdir -p /data/mysql/data
useradd -s /sbin/nologin mysql
vim /etc/profileexport PATH=/application/mysql/bin:$PATH
让环境变量生效:
source /etc/profile
命令:mysql -V
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
解决方法:
安装 libncurses相关依赖
yum install libncurses*
chown -R mysql.mysql /application/*chown -R mysql.mysql /data
===================db01=======================
mkdir /data/3307/data -pmkdir /data/3308/data -pmkdir /data/3309/data -pmkdir /data/3310/data -p
===================db02=======================
mkdir /data/3307/data -pmkdir /data/3308/data -pmkdir /data/3309/data -pmkdir /data/3310/data -p
===================db01=======================
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3307/datamysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3308/datamysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3309/datamysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3310/data
===================db02=======================
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3307/datamysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3308/datamysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3309/datamysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3310/data
=================================DB01===================================
配置文件准备-3307:
cat >/data/3307/my.cnf <<EOF[mysqld]basedir=/application/mysqldatadir=/data/3307/datasocket=/data/3307/mysql.sockport=3307log-error=/data/3307/mysql.loglog_bin=/data/3307/mysql-binbinlog_format=rowskip-name-resolveserver_id=7gtid-mode=>
配置文件准备-3308:
cat >/data/3308/my.cnf <<EOF[mysqld]basedir=/application/mysqldatadir=/data/3308/datasocket=/data/3308/mysql.sockport=3308log-error=/data/3308/mysql.loglog_bin=/data/3308/mysql-binbinlog_format=rowskip-name-resolveserver_id=8gtid-mode=>
配置文件准备-3309:
cat >/data/3309/my.cnf <<EOF[mysqld]basedir=/application/mysqldatadir=/data/3309/datasocket=/data/3309/mysql.sockport=3309log-error=/data/3309/mysql.loglog_bin=/data/3309/mysql-binbinlog_format=rowskip-name-resolveserver_id=9gtid-mode=>
配置文件准备-3310:
cat >/data/3310/my.cnf <<EOF[mysqld]basedir=/application/mysqldatadir=/data/3310/datasocket=/data/3310/mysql.sockport=3310log-error=/data/3310/mysql.loglog_bin=/data/3310/mysql-binbinlog_format=rowskip-name-resolveserver_id=10gtid-mode=>
启动服务-3307
cat >/etc/systemd/system/mysqld3307.service<<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.target syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnfLimitNOFILE = 10000EOF
启动服务-3308:
cat >/etc/systemd/system/mysqld3308.service<<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.target syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnfLimitNOFILE = 10000EOF
启动服务-3309:
cat >/etc/systemd/system/mysqld3309.service<<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnfLimitNOFILE = 10000EOF
启动服务-3310:
cat >/etc/systemd/system/mysqld3310.service<<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.target syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3310/my.cnfLimitNOFILE = 10000EOF
=================================DB02===================================
配置文件准备-3307:
cat >/data/3307/my.cnf <<EOF[mysqld]basedir=/application/mysqldatadir=/data/3307/datasocket=/data/3307/mysql.sockport=3307log-error=/data/3307/mysql.loglog_bin=/data/3307/mysql-binbinlog_format=rowskip-name-resolveserver_id=17gtid-mode=>
配置文件准备-3308:
cat >/data/3308/my.cnf <<EOF[mysqld]basedir=/application/mysqldatadir=/data/3308/datasocket=/data/3308/mysql.sockport=3308log-error=/data/3308/mysql.loglog_bin=/data/3308/mysql-binbinlog_format=rowskip-name-resolveserver_id=18gtid-mode=>
配置文件准备-3309:
cat >/data/3309/my.cnf <<EOF[mysqld]basedir=/application/mysqldatadir=/data/3309/datasocket=/data/3309/mysql.sockport=3309log-error=/data/3309/mysql.loglog_bin=/data/3309/mysql-binbinlog_format=rowskip-name-resolveserver_id=19gtid-mode=>
配置文件准备-3310:
cat >/data/3310/my.cnf <<EOF[mysqld]basedir=/application/mysqldatadir=/data/3310/datasocket=/data/3310/mysql.sockport=3310log-error=/data/3310/mysql.loglog_bin=/data/3310/mysql-binbinlog_format=rowskip-name-resolveserver_id=20gtid-mode=>
启动服务-3307:
cat >/etc/systemd/system/mysqld3307.service<<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.target syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnfLimitNOFILE = 10000EOF
启动服务-3308:
cat >/etc/systemd/system/mysqld3308.service<<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnfLimitNOFILE = 10000EOF
启动服务-3309:
cat >/etc/systemd/system/mysqld3309.service<<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.target syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnfLimitNOFILE = 10000EOF
启动服务-3310:
cat >/etc/systemd/system/mysqld3310.service<<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.target syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3310/my.cnfLimitNOFILE = 10000EOF
systemctl daemon-reloadsystemctl daemon-reexec
需要修改 /etc/selinux/config 再重启操作系统
SELINUX=disabled
chown -R mysql.mysql /data/*systemctl start mysqld3307systemctl start mysqld3308systemctl start mysqld3309systemctl start mysqld3310
mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'"mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"mysql -S /data/3310/mysql.sock -e "show variables like 'server_id'"
ss -lntss -lnt |grep 33
systemctl enable mysqld3307systemctl enable mysqld3308systemctl enable mysqld3309systemctl enable mysqld3310
reboot操作系统可以验证。
1、错误日志:/data/3307/mysql.log
2、systemctl status mysqld3307.service
3、journalctl -xe
解决办法:永久关掉需要修改 /etc/selinux/config 再重启机器就好
SELINUX=disabled
箭头指向谁,谁就是主库
1 72.16.93.21 :3307 <————> 172.16.93.22 :3307
172.16.93.21 :3309 ————> 172.16.93.21 :3307
172.16.93.22 :3309 ————> 172.16.93.22:3307
172.16.93.22 :3308 <————> 172.16.93.21 :3308
172.16.93.22 :3310 ————> 172.16.93.22:3308
172.16.93.21:3310 ————> 172.16.93.21:3308
shard1:
Master: 1 72.16.93.21: 3307
Slave1: 172.16.93.21:3309
Standby Master : 172.16.93.22:3307
Slave2 : 172.16.93.22:3309
shard2:
Master : 172.16.93.22:3308
Slave1: 172.16.93.22:3310
Standby Master : 172.16.93.21:3308
Slave2 : 172.16.93.21:3310
图示:

172.16.93.21:3307 <————> 172.16.93.22:3307
## db02(172.16.93.22)
mysql -S /data/3307/mysql.sock -e "grant replication slave on *.* to rep1@'%' identified by 'zone2018';"mysql -S /data/3307/mysql.sock -e "grant all on *.* to root@'%' identified by 'zone2018' with grant option;"
## db01( 172.16.93.21 )
mysql -S /data/3307/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.22', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"mysql -S /data/3307/mysql.sock -e "start slave;"mysql -S /data/3307/mysql.sock -e "show slave status \G"
## db02(172.16.93.22)
mysql -S /data/3307/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.21', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"mysql -S /data/3307/mysql.sock -e "start slave;"mysql -S /data/3307/mysql.sock -e "show slave status \G"
# 172.16.93.21:3309 ————> 172.16.93.21:3307
##db01(172.16.93.21)
mysql -S /data/3309/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.21', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"mysql -S /data/3309/mysql.sock -e "start slave;"mysql -S /data/3309/mysql.sock -e "show slave status \G"
# 172.16.93.22:3309 ————> 172.16.93.22:3307
##db02(172.16.93.22)
mysql -S /data/3309/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.22', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"mysql -S /data/3309/mysql.sock -e "start slave;"mysql -S /data/3309/mysql.sock -e "show slave status \G"
# 172.16.93.22:3308 <————> 172.16.93.21:3308
## db01(172.16.93.21)
mysql -S /data/3308/mysql.sock -e "grant replication slave on *.* to rep1@'%' identified by 'zone2018';"mysql -S /data/3308/mysql.sock -e "grant all on *.* to root@'%' identified by 'zone2018' with grant option;"
## db02(172.16.93.22)
mysql -S /data/3308/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.21', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"mysql -S /data/3308/mysql.sock -e "start slave;"mysql -S /data/3308/mysql.sock -e "show slave status \G"
## db01(172.16.93.21)
mysql -S /data/3308/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.22', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"mysql -S /data/3308/mysql.sock -e "start slave;"mysql -S /data/3308/mysql.sock -e "show slave status \G"
# 172.16.93.22:3310 ————> 172.16.93.22:3308
## db02(172.16.93.22)
mysql -S /data/3310/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.22', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"mysql -S /data/3310/mysql.sock -e "start slave;"mysql -S /data/3310/mysql.sock -e "show slave status \G"
# 172.16.93.21:3310 ————> 172.16.93.21:3308
## db01(172.16.93.21)
mysql -S /data/3310/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='172.16.93.21', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER='rep1', MASTER_PASSWORD='zone2018';"mysql -S /data/3310/mysql.sock -e "start slave;"mysql -S /data/3310/mysql.sock -e "show slave status \G"
mysql -S /data/3307/mysql.sock -e "show slave status\G" | grep Yesmysql -S /data/3308/mysql.sock -e "show slave status\G" | grep Yesmysql -S /data/3309/mysql.sock -e "show slave status\G" | grep Yesmysql -S /data/3310/mysql.sock -e "show slave status\G" | grep Yes
如果中间出现错误,在每个节点执行以下命令可以清除主从结构配置,重新配置即可:
mysql -S /data/3307/mysql.sock -e "stop slave; reset slave all;"mysql -S /data/3308/mysql.sock -e "stop slave; reset slave all;"mysql -S /data/3309/mysql.sock -e "stop slave; reset slave all;"mysql -S /data/3310/mysql.sock -e "stop slave; reset slave all;"
mysql -S /data/3307/mysql.sock -e "DROP DATABASE X; CREATE DATABASE X DEFAULT CHARACTER SET utf8mb4;"mysql -S /data/3308/mysql.sock -e "DROP DATABASE X; CREATE DATABASE X DEFAULT CHARACTER SET utf8mb4;"mysql -S /data/3309/mysql.sock -e "DROP DATABASE X; CREATE DATABASE X DEFAULT CHARACTER SET utf8mb4;"mysql -S /data/3310/mysql.sock -e "DROP DATABASE X; CREATE DATABASE X DEFAULT CHARACTER SET utf8mb4;"
查看数据库命令:
mysql -S /data/3307/mysql.sock -e "SHOW DATABASES;"mysql -S /data/3308/mysql.sock -e "SHOW DATABASES;"mysql -S /data/3309/mysql.sock -e "SHOW DATABASES;"mysql -S /data/3310/mysql.sock -e "SHOW DATABASES;"
杀进程停止数据库命令:
pkill mysql#使用sock直接连接数据库直接命令:mysql -S /data/3307/mysql.sockCREATE DATABASE X DEFAULT CHARACTER SET utf8mb4
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31563356/viewspace-2736077/ ,如需转载,请注明出处,否则将追究法律责任。