概述
业务需要在单台服务器上部署两套mysql8.0数据库服务,其中也踩了许多坑的地方,在这里留个笔记。
部署两套数据库,主要思路,就是分开两套环境,两套配置文件,然后先按照第一套环境配置启动第一台服务,随后就是一模一样操作,启动第二台数据库服务。
下载安装包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
如果在官网上下载,要看自己的机器是多少位的,找到合适的版本。我的服务器是64位,结果我下载的是“mysql-8.0.28-linux-glibc2.12-i686.tar.xz”安装包,这个安装包是32位,解压安装会出现一些库找不到的问题。
新建目录
在/data目录下创建一个数据库目录,数据库目录下创建两个目录,一个是mysql3306,一个是mysql3307
解压
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
解压后的目录重命名为mysql,分别移动到mysql3306和mysql3307中。
创建用户和用户组
groupadd mysql
useradd -g mysql mysql
创建配置和其他文件
- 删除 /etc/my.cnf 和 /etc/my.cnf.d文件
- 在mysql3306创建my.cnf,完成后,修改相关信息复制一份到mysql3307中。内容如下([mysqld,client]此类引导头不能去掉,否则会报错)
[mysql]
default-character-set=utf8mb4
[client]
port=3306
socket=/data/mysqls/mysql3306/mysql.sock
[mysqld]
port=3306
socket=/data/mysqls/mysql3306/mysql.sock
basedir=/data/mysqls/mysql3306
datadir=/data/mysqls/mysql3306/data
log-error=/data/mysqls/mysql3306/mysql.log
pid-file=/data/mysqls/mysql3306/mysql.pid
在my.cnf中,指定了data目录、mysql.log文件,这里先提前创建。
mkdir /data/mysqls/mysql3306/data
touch /data/mysqls/mysql3306/mysql.log
赋予权限
给mysqls下所有文件赋予权限,包括my.cnf等
chown -R mysql.mysql /data/mysqls/
chmod -R 755 /data/mysqls/
初始化
可切换为mysql身份执行指令,也可以使用root身份执行指令。本人用的mysql身份。进入mysql3306下的mysql的bin目录,执行命令(另一台数据库一样操作,目录不同而已)
./mysqld --user=mysql --basedir=/data/mysqls/mysql3306 --datadir=/data/mysqls/mysql3306/data/ --initialize
初始化之前试过指定文件,但是mysql还是用默认的路径和参数,这里在初始化时候指定目录。
记住控制台的密码,后续会用上。
启动数据库
./mysqld_safe --defaults-file=/data/mysqls/mysql3306/my.cnf &
启动数据库指定我们的配置文件,在启动的日志里面可能会出现权限报错,这个时候需要对我们配置的目录赋予权限,具体目录参考日志。如下:
对问题目录下的文件,都改为mysql用户组
再次启动,可启动成功
登录并修改密码
我们进入mysql3306和mysql3307各自的bin目录下,使用命令登录
./mysql -u root -p -h127.0.0.1 --port=3306
./mysql -u root -p -h127.0.0.1 --port=3307
如果不指定 -h127.0.0.1会出错,提示找不到sock套接字文件,他会去/tmp目录找(我也不清楚咋回事,有了解的求评论告知)
加上ip后可以正常登录。
密码为初始化步骤时候记下的密码。
修改密码
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
刷新权限
flush privileges;
设置远程登陆,客户端连接
use mysql
update user set user.Host='%'where user.User=‘root’;
flush privileges;
开启服务器外部端口,就可以使用客户端链接了,开启端口命令为
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --reload