MySQL的多实例使用同一个程序,依靠不同的启动文件,不同的数据目录启动的多个进程,可以充分利用机器的性能,但是也会造成机器的容灾能力变差

创建MySQL用户

  1. useradd mysql -s /sbin/nologin -M

主程序

#获取主程序
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-el7-x86_64.tar.gz
#解压主程序
tar xf mysql-5.7.29-el7-x86_64.tar.gz -C /usr/local/

#做软连接
ln -s /usr/local/mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql

#授权mysql用户
chown -R mysql:mysql /usr/local/mysql-5.7.28-linux-glibc2.12-x86_64

创建数据目录

#以3306为例
mkdir -p /data/mysql3306/{binlogs,etc,data,log,run}
#目录解释
binlogs        #存放binlog文件
etc                #存放配置文件my.cnf
data            #存放初始化主数据文件
log                #存储日志文件
run                #存放启动时的socket,pid文件

初始化

#给mysql用户授权数据目录
chown -R mysql:mysql /data/mysql3306

#安全的方式初始化
#以这种方式初始化会生成一个随机密码,注意保存
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3306/data

#不安全的方式初始化
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3306/data
#如果以这种方式生成的,需要在log目录下创建一个错误日志文件,授权给mysql用户
touch /data/mysql3306/log/mysql_error.log
chown -R mysql:mysql /data/mysql3306/log/mysql_error.log

主配置文件

#删除系统自带myc.f
rm -f /etc/my.cnf

#主配置文件my.cnf
cat > /data/mysql3306/etc/my.cnf <<EOF
[mysqld]
port = 3306
socket = /data/mysql3306/run/mysql.sock
pid_file = /data/mysql3306/run/mysql.pid
datadir = /data/mysql3306/data

skip-name-resolve

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

innodb_buffer_pool_size = 1024M
innodb_log_file_size = 2048M
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 0

key_buffer_size = 64M

log-error = /data/mysql3306/log/mysql_error.log
log-bin = /data/mysql3306/binlogs/mysql-bin
slow_query_log = 1
slow_query_log_file = /data/mysql3306/log/mysql_slow_query.log
long_query_time = 5

tmp_table_size = 32M
max_heap_table_size = 32M
query_cache_type = 0
query_cache_size = 0

server-id=1

relay_log_purge = 0

gtid_mode=ON
log_slave_updates
enforce_gtid_consistency
EOF

启动

直接启动

#启动
mysqld_safe --defaults-file=/data/mysql3306/etc/my.cnf &

#关闭
mysqladmin -uroot  -S /data/mysql3306/run/mysql.sock shutdown

使用systemctl管理

#写入配置文件
cat > /usr/lib/systemd/system/mysqld3306.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://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/mysql3306/etc/my.cnf
LimitNOFILE = 5000
EOF

#生效
systemctl daemon-reload

#启动
systemctl start mysqld3306
#查看状态
systemctl status mysqld3306
#停止
systemctl stop mysqld3306