Ubuntu22.04安装MySQL8多实例

1,216 阅读5分钟

一、APT安装mysql

1、安装MySQL服务器

sudo apt update sudo apt install mysql-server

2、启动和检查状态

sudo systemctl start mysql sudo systemctl status mysql

3、测试

mysql -uroot -p
回车在回车

exit退出

二、安装多实例

1、建目录

mkdir -p /data/{3307,3308}/data
chown -R mysql.mysql /data 或 chown -R mysql.mysql /data/3307

如果不修改,在后面初始化时化可能会出现如下错误:

2023-08-16T01:52:42.993773Z 0 [ERROR] [MY-010174] [Server] Can't change data directory owner to mysql

2023-08-16T01:52:42.993780Z 0 [ERROR] [MY-013455] [Server] The newly created data directory /data/3307/data/ by --initialize is unusable. You can remove it.

2023-08-16T01:52:42.993850Z 0 [ERROR] [MY-010119] [Server] Aborting

2、目录授权

cd /etc/apparmor.d

chmod 777 usr.sbin.mysqld

vi usr.sbin.mysqld

添加如下代码

/data/3307 rw,

/data/3307/** rwk,

/data/3307/data/ r,

/data/3307/data/** rwk,

image.png

chmod 644 usr.sbin.mysqld

service apparmor restart

如果不修改,在后面初始化时化可能会出现如下错误:

mysqld: Can't create directory '/data/3307/data/' (OS errno 13 - Permission denied)

以上 MySQL 的行为基于 APT 包安装产生,如果采用 MySQL 二进制包安装,则可以规避这个问题。

3、修改配置文件

  • 设置mysqld部分下的datadir参数为每个实例的数据目录。

  • 设置mysqld部分下的socket参数为每个实例的套接字文件路径。

  • 设置mysqld部分下的port参数为每个实例的端口号。

  • 设置mysqld部分下的其他参数,例如pid-file和log-error

vi /data/3307/my.cnf

[mysql] 
port=3307 
socket=/data/3307/mysql.sock 

[mysqld] 
basedir=/usr 
datadir=/data/3307/data 
socket=/data/3307/mysql.sock 
user=mysql port=3307 
server_id=3307 
symbolic-links=0 
log_error=/data/3307/mysql.log 
pid-file=/data/3307/mysql.pid 
mysqlx_socket=/data/3307/mysqlx.sock 
mysqlx_port=33070 

[mysqld_safe] 
log_error=/data/3307/mysql.log 
pid-file=/data/3307/mysql.pid

chown mysql:mysql /data/3307/my.cnf

chmod 644 /data/3307/my.cnf

如果不修改,在后面初始化时化可能会出现如下错误:

my_print_defaults: [Warning] World-writable config file '/data/3308/my.cnf' is ignored.

4、初始化

保证mysql是没问题的,可以访问一下mysql(如mysql -uroot -p回车在回车),以下操作mysql不用关闭

安装多次导致mysql损坏,sudo apt install mysql-server 重新安装了mysql

如果mysql有问题,可能报错: [ERROR] Could not open mysql.plugin table. Some plugins may be not loaded

mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak

mysqld初始化时,会先从默认路径去找my.cnf,如果找到了,是不会读取你定制的my.cnf

sudo mysqld --defaults-file=/data/3307/my.cnf --initialize-insecure --user=mysql --basedir=/usr  --datadir=/data/3307/data

创建失败可以使用命令journalctl -xe进行查看

[ERROR] [MY-013236] [Server] The designated data directory /data/3307/data/ is unusable. You can remove all files that the server added to it.

[ERROR] [MY-010174] [Server] Can't change data directory owner to mysql

5、开机启动

vi /etc/systemd/system/mysqld3307.service

[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=/usr/sbin/mysqld --defaults-file=/data/3307/my.cnf  
LimitNOFILE = 5000

输入以下命令以确保MySQL服务在开机时启动

sudo systemctl enable mysqld3307

6、启动

测试启动 /var/lib/mysql# mysqld_safe --defaults-file=/data/3307/my.cnf

启动服务 systemctl start mysqld3307

7、验证

1、systemctl status mysqld3307

● mysqld3307.service - MySQL Server Loaded: loaded (/etc/systemd/system/mysqld3307.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2023-08-16 19:56:30 CST; 4min 10s ago Docs: man:mysqld(8) dev.mysql.com/doc/refman/… Main PID: 1584597 (mysqld) Tasks: 38 (limit: 57694) Memory: 369.9M CPU: 1.355s CGroup: /system.slice/mysqld3307.service └─1584597 /usr/sbin/mysqld --defaults-file=/data/3307/my.cnf

8月 16 19:56:30 lyl-PowerEdge-R730 systemd[1]: Started MySQL Server.

2、ss -nltp | grep mysql

LISTEN 0 151 *:3307 : users:(("mysqld",pid=1584597,fd=23))
LISTEN 0 151 *:3306 : users:(("mysqld",pid=1388614,fd=23))
LISTEN 0 151 *:3308 : users:(("mysqld",pid=1570223,fd=23))
LISTEN 0 70 *:33070 : users:(("mysqld",pid=1584597,fd=17))
LISTEN 0 70 *:33060 : users:(("mysqld",pid=1388614,fd=21))
LISTEN 0 70 *:33080 : users:(("mysqld",pid=1570223,fd=20))

3、netstat -lnp | grep 330

tcp6 0 0 :::3307 :::* LISTEN 1584597/mysqld
tcp6 0 0 :::3306 :::* LISTEN 1388614/mysqld
tcp6 0 0 :::3308 :::* LISTEN 1570223/mysqld
tcp6 0 0 :::33070 :::* LISTEN 1584597/mysqld
tcp6 0 0 :::33060 :::* LISTEN 1388614/mysqld
tcp6 0 0 :::33080 :::* LISTEN 1570223/mysqld
unix 2 [ ACC ] STREAM LISTENING 5388257 1570223/mysqld /data/3308/mysqlx.sock

unix 2 [ ACC ] STREAM LISTENING 5453685 1584597/mysqld /data/3307/mysqlx.sock

unix 2 [ ACC ] STREAM LISTENING 5388260 1570223/mysqld /data/3308/mysql.sock

unix 2 [ ACC ] STREAM LISTENING 5453688 1584597/mysqld /data/3307/mysql.sock

4、mysql -S /data/3307/mysql.sock -e "select @@server_id"

+-------------+

| @@server_id |

+-------------+

| 3307 |

+-------------+

5、尝试连接

mysql -u root -p -S /data/3307/mysql.sock

三、参考文献:

1、使用mysqld_multi 可以参考:

blog.csdn.net/u010080562/…

2、# 技术分享 | MySQL 如何适配 AppArmor

www.modb.pro/db/169989

3、# MySQL8多实例安装

www.modb.pro/db/620778

四、卸载myql

sudo service mysql stop
sudo apt-get purge mysql-*
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean