一、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,
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 可以参考:
2、# 技术分享 | MySQL 如何适配 AppArmor
3、# MySQL8多实例安装
四、卸载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