Skip to content

同一个服务器安装多个MySQL

1、新建用户组

mysql和用户mysql,用户不能用来登录

bash
groupadd mysql
# 用户名不一样,组一样
useradd -r -g mysql -s /bin/false mysql1
useradd -r -g mysql -s /bin/false mysql2

2、创建相关目录

这里所有的mysql都放在/data/mysql目录下,以mysql1、2、3...进行区分

bash
mkdir -p /data/mysql

mkdir -p /data/mysql/mysql1/logs
mkdir -p /data/mysql/mysql1/data
touch /data/mysql/mysql1/logs/mysqld-error.log

mkdir -p /data/mysql/mysql2/logs
mkdir -p /data/mysql/mysql2/data
touch /data/mysql/mysql2/logs/mysqld-error.log

3、解压安装包 并进行重命名

bash
# 解压
tar -xvf mysql-8.0.31-el7-x86_64.tar
tar -xvf mysql-8.0.31-el7-x86_64.tar.gz
# 重命名
mv mysql-8.0.31-el7-x86_64 mysql
# 复制或移入MySQL,移入需要重新解压新的再重命名移入
mv /opt/mysql /data/mysql/mysql1
mv /opt/mysql /data/mysql/mysql2

4、在mysql8文件夹下新建用户级配置文件my.cnf

除了MySQL本身的文件所在的目录不同以外,my.cnf也要有单独的位置,因为其内容不一致

bash
touch /data/mysql/mysql1/my.cnf
vi /data/mysql/mysql1/my.cnf

touch /data/mysql/mysql2/my.cnf
vi /data/mysql/mysql2/my.cnf

5、填充以下基础配置。可以将一些优化配置添加进去。

**mysql1:**my.cnf

[mysqld]
# 设置表名不区分大小写
lower_case_table_names=1
basedir=/data/mysql/mysql1/mysql
datadir=/data/mysql/mysql1/data
socket=/data/mysql/mysql1/mysql.sock
# 自定义服务端口
port=31309
# 修改数据库日志时间格式
log_timestamps=SYSTEM
sql_mode=NO_ENGINE_SUBSTITUTION
# 以下是优化项 视情况修改添加
wait_timeout=2880000
max_allowed_packet=128M

[mysqld_safe]
log-error=/data/mysql/mysql1/mysqld-error.log

**mysql2:**my.cnf

bash
[mysqld]
# 设置表名不区分大小写
lower_case_table_names=1
basedir=/data/mysql/mysql2/mysql
datadir=/data/mysql/mysql2/data
socket=/data/mysql/mysql2/mysql.sock
# 自定义服务端口
port=32309
# 修改数据库日志时间格式
log_timestamps=SYSTEM
sql_mode=NO_ENGINE_SUBSTITUTION
# 以下是优化项 视情况修改添加
wait_timeout=2880000
max_allowed_packet=128M

[mysqld_safe]
log-error=/data/mysql/mysql2/mysqld-error.log

6、权限处理

用户不一致,组一致

drwxr-xr-x. 5 mysql1 mysql 98 4月  25 15:04 mysql1
drwxr-xr-x. 5 mysql2 mysql 98 4月  25 15:04 mysql2
bash
# 为用户的添加文件夹的权限
chown -R mysql1:mysql /data/mysql/mysql1
# 对文件夹的赋权
chmod 750 /data/mysql/mysql1/data

# 为用户的添加文件夹的权限
chown -R mysql2:mysql /data/mysql/mysql2
# 对文件夹的赋权
chmod 750 /data/mysql/mysql2/data

初始化mysql,获取root临时密码。

bash
# 初始化mysql
cd /data/mysql/mysql1/mysql
./bin/mysqld --defaults-file=/data/mysql/mysql1/my.cnf --initialize --user=mysql1 --port=31306

cd /data/mysql/mysql2/mysql
./bin/mysqld --defaults-file=/data/mysql/mysql2/my.cnf --initialize --user=mysql2 --port=32306
bash
# 执行日志如下
[root@mysql mysql]# ./bin/mysqld --defaults-file=/data/mysql/mysql1/my.cnf --initialize --user=mysql1 --port=31306
2024-04-25T15:02:44.533593+08:00 0 [System] [MY-013169] [Server] /data/mysql/mysql1/mysql/bin/mysqld (mysqld 8.0.31) initializing of server in progress as process 96282
2024-04-25T15:02:44.567540+08:00 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-04-25T15:02:46.017168+08:00 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-04-25T15:02:47.784869+08:00 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: *u%Wcan5jN5l

[root@mysql mysql]# ./bin/mysqld --defaults-file=/data/mysql/mysql2/my.cnf --initialize --user=mysql2 --port=32306
2024-04-25T15:02:44.277178+08:00 0 [System] [MY-013169] [Server] /data/mysql/mysql2/mysql/bin/mysqld (mysqld 8.0.31) initializing of server in progress as process 96281
2024-04-25T15:02:44.313146+08:00 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-04-25T15:02:45.924892+08:00 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-04-25T15:02:48.129332+08:00 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Fp>uy-V/G2<H

[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: zpjhj;4.<Dmp,密码中存在特殊字符时,可以用单引号直接包裹密码。

7、启动Mysql服务

bash
# 启动mysql服务
cd /data/mysql/mysql1/mysql
./bin/mysqld_safe --defaults-file=/data/mysql/mysql1/my.cnf --user=mysql1 --port=31306 &

cd /data/mysql/mysql2/mysql
./bin/mysqld_safe --defaults-file=/data/mysql/mysql1/my.cnf --user=mysql2 --port=32306 &

8、登录Mysql,支持远程登录

sql
# 使用临时密码登录
cd /data/mysql/mysql1/mysql 
./bin/mysql -h127.0.0.1 -uroot -p -P31306 # 需要输入密码
cd /data/mysql/mysql2/mysql 
./bin/mysql -h127.0.0.1 -uroot -p -P32306 # 需要输入密码

# 修改root初始化密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
exit

cd /data/mysql/mysql1/mysql 
./bin/mysql -h127.0.0.1 -uroot -p -P31306 # 需要输入新密码
cd /data/mysql/mysql2/mysql 
./bin/mysql -h127.0.0.1 -uroot -p -P32306 # 需要输入新密码

# 使root支持远程登录
use mysql;
update user set host='%' where user='root';
flush privileges;

注册成系统服务并自启动

bash
# mysqld服务到系统

# ===== MySQL1 =====

cd /data/mysql/mysql1/mysql 
cp -a ./support-files/mysql.server /etc/init.d/mysql1
# 授权以及添加服务
chmod +x /etc/init.d/mysql1
chkconfig --add mysql1
service mysql1 start
service mysql1 status


/etc/init.d/mysql1:
# 约46、47
basedir=/data/mysql/mysql1/mysql
datadir=/data/mysql/mysql1/data
# 约207
conf=/data/mysql/mysql1/my.cnf
# 约234
if test -r "/data/mysql/mysql1/my.cnf"
# 约236
extra_args="-e /data/mysql/mysql1/my.cnf"
# 约266行 --user=mysql1
$bindir/mysqld_safe --datadir="$datadir" --user=mysql1 --pid-file="$mysqld_pid_file_path" $other_args >/dev/null & 

# ===== MySQL2 =====

cd /data/mysql/mysql2/mysql 
cp -a ./support-files/mysql.server /etc/init.d/mysql2
# 授权以及添加服务
chmod +x /etc/init.d/mysql2
chkconfig --add mysql2
service mysql2 start
service mysql2 status
service mysql2 stop


/etc/init.d/mysql2:
# 约46、47
basedir=/data/mysql/mysql2/mysql
datadir=/data/mysql/mysql2/data
# 约207
conf=/data/mysql/mysql2/my.cnf
# 约234
if test -r "/data/mysql/mysql2/my.cnf"
# 约236
extra_args="-e /data/mysql/mysql2/my.cnf"
# 约266行 --user=mysql2
$bindir/mysqld_safe --datadir="$datadir" --user=mysql1 --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &

卸载mysql

查看mysql运行状态

service mysql1 status
service mysql2 status

停止mysql运行,如果没有运行则跳过。

service mysql1 stop
service mysql2 stop

查询是否有mysql

rpm -qa|grep -i mysql

结果

perl-DBD-MySQL-4.023-5.el7.x86_64

删除

rpm -ev perl-DBD-MySQL-4.023-5.el7.x86_64 --nodeps

查出MySQL相关的文件/文件夹,逐一删除

find / -name mysql

同时删除日志文件。

rm -rf /data/mysql-sd/logs/mysql8

删除用户、用户组

userdel mysql
groupdel mysql