首页 > 数据库 > MySQL > MySQL多实例部署
MySQL多实例,简单理解就是在一台服务器 上, MySQL 服务开启多个不同的端口(如3306、3307,3308),运行多个服务进程。这些 mysql 服务进程通过不同的 socket 来监听不同的数据端口,进而互不干涉的提供各自的服务。
1)在测试环境中,公司会需要多个数据库环境来测试业务,当使用强度又不是很高,在单机上部署多个实例是个不错选择。
2)公司业务访问量不是太大的时候,服务器的资源基本都是过剩状态。此时也适合 mysql 多实例的应用。
mysql 多实例常规方法有两种
方法一:使用多个 my.cnf 配置文件启动不同的进程来实现多实例,这种方法逻辑简单,配置不容易出错。
方法二:使用官方自带的 mysqld_multi 来控制 my.cnf 配置文件,来实现多实例,配置相对复杂。(本文未涵盖)
1)配置文件安装路径不能相同
2)数据库目录不能相同
3)启动脚本不能同名
4)端口不能相同
5)socket 文件生成路径不能相同
https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
[root@db03 tmp]# mkdir -p /opt/ [root@db03 tmp]# tar -zxvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz -C /opt/ [root@db03 tmp]# cd /opt [root@db03 opt]# ls mysql-5.7.30-linux-glibc2.12-x86_64 [root@db03 opt]# mv mysql-5.7.30-linux-glibc2.12-x86_64/ mysql [root@db03 opt]# ls mysql
如果以前安装过 mysql 需要停止服务,并关闭开机自启动,移走 /etc/my.cnf 配置文件。系统自带的 mariadb,也建议删除
[root@db03 ~]# killall mysqld [root@db03 ~]# mv /etc/my.cnf /etc/my.cnf.bak [root@db03 opt]# rpm -qa | grep mariadb mariadb-libs-5.5.64-1.el7.x86_64 [root@db03 opt]# yum remove mariadb-libs.x86_64 -y yum install -y libaio
[root@db03 opt]# groupadd -g 1002 mysql [root@db03 opt]# useradd -u 1002 -g 1002 -M -s /sbin/nologin mysql [root@db03 opt]# id mysql uid=1002(mysql) gid=1002(mysql) groups=1002(mysql)
echo 'export PATH=$PATH:/opt/mysql/bin' >> /etc/profile source /etc/profile
[root@db03 ~]# mkdir -p /data/330{7,8,9}/data
cat > /data/3307/my.cnf <<EOF [mysqld] basedir=/opt/mysql datadir=/data/3307/data socket=/data/3307/mysql.sock log_error=/data/3307/mysql.log port=3307 server_id=7 log_bin=/data/3307/mysql-bin EOF cat > /data/3308/my.cnf <<EOF [mysqld] basedir=/opt/mysql datadir=/data/3308/data socket=/data/3308/mysql.sock log_error=/data/3308/mysql.log port=3308 server_id=8 log_bin=/data/3308/mysql-bin EOF cat > /data/3309/my.cnf <<EOF [mysqld] basedir=/opt/mysql datadir=/data/3309/data socket=/data/3309/mysql.sock log_error=/data/3309/mysql.log port=3309 server_id=9 log_bin=/data/3309/mysql-bin EOF
mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/opt/mysql mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/opt/mysql mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/opt/mysql
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=/opt/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf LimitNOFILE = 5000 EOF
[root@db03 ~]# cd /etc/systemd/system/ [root@db03 system]# cp mysqld3307.service mysqld3308.service [root@db03 system]# cp mysqld3307.service mysqld3309.service
vim mysqld3308.service # 修改为: ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf vim mysqld3309.service # 修改为: ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
修改后的结果 [root@db03 system]# grep 'ExecStart' mysqld3307.service ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf [root@db03 system]# grep 'ExecStart' mysqld3308.service ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf [root@db03 system]# grep 'ExecStart' mysqld3309.service ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
[root@db03 ~]# chown -R mysql.mysql /opt/mysql [root@db03 ~]# chown -R mysql.mysql /data/330*
[root@db03 ~]# systemctl start mysqld3307.service [root@db03 ~]# systemctl start mysqld3308.service [root@db03 ~]# systemctl start mysqld3309.service
[root@db03 ~]# netstat -lnp|grep 330 tcp6 0 0 :::3307 :::* LISTEN 70516/mysqld tcp6 0 0 :::3308 :::* LISTEN 70557/mysqld tcp6 0 0 :::3309 :::* LISTEN 70594/mysqld unix 2 [ ACC ] STREAM LISTENING 194532 70516/mysqld /data/3307/mysql.sock unix 2 [ ACC ] STREAM LISTENING 198752 70594/mysqld /data/3309/mysql.sock unix 2 [ ACC ] STREAM LISTENING 198669 70557/mysqld /data/3308/mysql.sock [root@db03 ~]# mysql -S /data/3307/mysql.sock -e "select @@server_id" +-------------+ | @@server_id | +-------------+ | 7 | +-------------+ [root@db03 ~]# mysql -S /data/3308/mysql.sock -e "select @@server_id" +-------------+ | @@server_id | +-------------+ | 8 | +-------------+ [root@db03 ~]# mysql -S /data/3309/mysql.sock -e "select @@server_id" +-------------+ | @@server_id | +-------------+ | 9 | +-------------+
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69982604/viewspace-2717297/ ,如需转载,请注明出处,否则将追究法律责任。