CentOS安装双版本MySQL

CentOS安装双版本MySQL

一、下载mysql

本文以5.7.31和8.0.38为例

  1. 去官网下载 压缩包

    https://dev.mysql.com/downloads/mysql/5.7.html
    https://dev.mysql.com/downloads/mysql/8.html

  2. 也可以直接在服务器运行下边这两条命令
    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
    wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.38-linux-glibc2.17-x86_64.tar.xz

  3. 没有wget可以安装,命令 sudo yum install wget

  4. 完成下载后,上传至服务器想要的位置 /home/pkg/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz/home/pkg/mysql-8.0.38-linux-glibc2.17-x86_64.tar.xz

二、检查服务器是否安装过mysql

  1. 检查有无安装过MySQL
shell 复制代码
rpm -qa|grep mysql
# 显示没有东西,便是没有安装过mysql
  1. 如果安装过或者系统自带,便需要去查询所有的mysql对应的文件,进行卸载,全部删除
shell 复制代码
whereis mysql
find / -name mysql

三、卸载CentOS7自带的mariadb

  1. 查看系统自带的
shell 复制代码
rpm -qa|grep mariadb
  1. 卸载Mariadb
shell 复制代码
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
  1. 删除掉etc下面的my.cnf,等会在建,不然会有问题
shell 复制代码
rm /etc/my.cnf

四、创建mysql用户和用户组

  1. 检查有没有mysql用户组,没有便进行创建
shell 复制代码
# 查看
cat /etc/group | grep mysql
cat /etc/passwd |grep mysql57
cat /etc/passwd |grep mysql8
  1. 创建MySQL用户组和用户
shell 复制代码
groupadd mysql
useradd -r -g mysql mysql57
useradd -r -g mysql mysql8

五、安装mysql57 (第一个)

  1. 解压MySQL安装包
shell 复制代码
tar -zxvf /home/pkg/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /usr/local/mysql
  1. 修改目录名称
shell 复制代码
mv mysql-5.7.31-linux-glibc2.12-x86_64 mysql57
  1. 给用户组添加权限
shell 复制代码
chown -R mysql57:mysql /usr/local/mysql/mysql57
chmod -R 755 /usr/local/mysql/mysql57
  1. 配置第一个 MySQL 配置文件
shell 复制代码
vim /etc/mysql57.cnf

# 文件内容如下,路径修改为自己的路径

[client]
socket=/usr/local/mysql/mysql57/data/mysql.sock

[mysqld]
socket=/usr/local/mysql/mysql57/data/mysql.sock
datadir=/usr/local/mysql/mysql57/data
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
log-error=/usr/local/mysql/mysql57/data/mysqld.log
pid-file=/usr/local/mysql/mysql57/data/mysqld.pid
max_connections=400
innodb_file_per_table=1
#表名大小写不敏感, 敏感为
lower_case_table_names=1

#是否只读,1代表只读,0代表读写
read-only=0

#忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01

# 指定用户
user=mysql57

[mysqld_safe]
socket=/usr/local/mysql/mysql57/data/mysql.sock
  1. 初始化MySQL 实例
shell 复制代码
# 进入安装目录
cd /usr/local/mysql/mysql57

# 初始化实例
bin/mysqld --defaults-file=/etc/my57.cnf --initialize --user=mysql57 --port=3306
  1. 查看初始化实例密码
shell 复制代码
vim /usr/local/mysql/mysql57/data/mysqld.log
  1. 启动实例
shell 复制代码
/usr/local/mysql/mysql57/bin/mysqld_safe --defaults-file=/etc/my57.cnf --user=mysql57 --port=3306 &
  1. 连接数据库测试
shell 复制代码
mysql -h127.0.0.1 -uroot -p
  1. 由于安装双版本mysql修改了 mysql.sock ,本地启动命令行需要添加 -h127.0.0.1 才能正常连接, 否则会报错找不到 mysql.sock
  2. 如果连接时出现错误:
    mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
    是因为系统中的该文件版本不一致导致,通过软连接重定向解决:
    sudo ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5
    其他类似的错误解决方法一致
  1. 修改初始密码
shell 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
  1. 开启远程访问
shell 复制代码
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;

如果远程访问不能连接,检查是否开启了防火墙 (firewalld)

  1. 创建mysql服务
shell 复制代码
vim /usr/lib/systemd/system/mysql57.service

# 写入下边的配置信息, User、Group、ExecStart 根据自己的实际情况修改
[Unit]
Description=MySQL Server on port 3306
After=network.target

[Service]
User=mysql57
Group=mysql
ExecStart=/usr/local/mysql/mysql57/bin/mysqld_safe --defaults-file=/etc/my57.cnf --user=mysql57 --port=3306
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure
RestartSec=5s
LimitNOFILE=5000

[Install]
WantedBy=multi-user.target
  1. 开启mysql服务
shell 复制代码
// 重新加载服务信息
systemctl daemon-reload

// 开启mysql57服务
systemctl start mysql57

// 设置服务开机自启
systemctl enable mysql57

六、安装mysql8 (第二个)

  1. 解压MySQL安装包
shell 复制代码
tar -zxvf /home/pkg/mysql-8.0.38-linux-glibc2.17-x86_64.tar.xz -C /usr/local/mysql
  1. 修改目录名称
shell 复制代码
mv mysql-8.0.38-linux-glibc2.17-x86_64.tar.xz mysql8
  1. 给用户组添加权限
shell 复制代码
chown -R mysql8:mysql /usr/local/mysql/mysql8
chmod -R 755 /usr/local/mysql/mysql8
  1. 配置第二个 MySQL 配置文件
shell 复制代码
vim /etc/mysql8.cnf

# 文件内容如下,路径修改为自己的路径

[client]
socket=/usr/local/mysql/mysql8/data/mysql.sock

[mysqld]
socket=/usr/local/mysql/mysql8/data/mysql.sock
datadir=/usr/local/mysql/mysql8/data
port=3307
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
log-error=/usr/local/mysql/mysql8/data/mysqld.log
pid-file=/usr/local/mysql/mysql8/data/mysqld.pid
max_connections=400
innodb_file_per_table=1
#表名大小写不敏感, 敏感为
lower_case_table_names=1

#是否只读,1代表只读,0代表读写
read-only=0

#忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01

# 指定用户
user=mysql8

[mysqld_safe]
socket=/usr/local/mysql/mysql8/data/mysql.sock
  1. 初始化MySQL 实例
shell 复制代码
# 进入安装目录
cd /usr/local/mysql/mysql8

# 初始化实例
bin/mysqld --defaults-file=/etc/my8.cnf --initialize --user=mysql8 --port=3307
  1. 查看初始化实例密码
shell 复制代码
vim /usr/local/mysql/mysql8/data/mysqld.log
  1. 启动实例
shell 复制代码
/usr/local/mysql/mysql8/bin/mysqld_safe --defaults-file=/etc/my8.cnf --user=mysql8 --port=3307 &
  1. 连接数据库测试
shell 复制代码
mysql -h127.0.0.1 -P3307 -uroot -p
  1. 双版本需要用 -P3307 指定端口号确定连接那个mysql服务
  2. 由于安装双版本mysql修改了 mysql.sock ,本地启动命令行需要添加 -h127.0.0.1 才能正常连接, 否则会报错找不到 mysql.sock
  3. 如果连接时出现错误:
    mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
    是因为系统中的该文件版本不一致导致,通过软连接重定向解决:
    sudo ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5
    其他类似的错误解决方法一致
  1. 修改初始密码
shell 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
  1. 开启远程访问
shell 复制代码
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;

如果远程访问不能连接,检查是否开启了防火墙 (firewalld)

  1. 创建mysql服务
shell 复制代码
vim /usr/lib/systemd/system/mysql8.service

# 写入下边的配置信息, User、Group、ExecStart 根据自己的实际情况修改
[Unit]
Description=MySQL Server on port 3307
After=network.target

[Service]
User=mysql8
Group=mysql
ExecStart=/usr/local/mysql/mysql8/bin/mysqld_safe --defaults-file=/etc/my8.cnf --user=mysql8 --port=3307
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure
RestartSec=5s
LimitNOFILE=5000

[Install]
WantedBy=multi-user.target
  1. 开启mysql服务
shell 复制代码
// 重新加载服务信息
systemctl daemon-reload

// 开启mysql8服务
systemctl start mysql8

// 设置服务开机自启
systemctl enable mysql8
相关推荐
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
追风林4 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
Hsu_kk6 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境6 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n6 小时前
MYSQL库的操作
数据库·mysql
eternal__day8 小时前
MySQL_聚合函数&分组查询
数据库·mysql
帅得不敢出门8 小时前
安卓设备adb执行AT指令控制电话卡
android·adb·sim卡·at指令·电话卡
咕哧普拉啦8 小时前
乐尚代驾十订单支付seata、rabbitmq异步消息、redisson延迟队列
java·spring boot·mysql·spring·maven·乐尚代驾·java最新项目
春哥的魔法书9 小时前
数据库基础(5) . DCL
数据库·mysql
鬼才血脉10 小时前
docker+mysql配置
mysql·adb·docker