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