本文是在一台Centos7虚拟机上面同时安装mysql5.7和mysql8.0的步骤,记录一下,方便后续回顾,这篇文章之后会接着学习搭建两台虚拟机一主一从的架构。
其中配置的文件名称、目录、端口号、IP地址要根据自己电脑的实际情况进行更改。
mysql5.7和mysql8.0同时安装完成后:
将安装包上传到家目录:
MySQL5.7安装步骤
先把将安装包解压、重命名,移动到/usr/local/目录:
cd ~
tar -xvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.36-linux-glibc2.12-x86_64 mysql57
mv mysql57/ /usr/local/
在MySQL安装目录下创建存储数据库数据的新目录data/:
cd /usr/local/mysql57/
mkdir data
新建编辑my.cnf文件并赋予执行权限(这是MySQL5.7的配置文件,8.0和5.7不一样,8.0的在后面):
cd /usr/local/mysql57/
vim my.cnf
[mysqld]
basedir=/usr/local/mysql57/
datadir=/usr/local/mysql57/data/
port=3306
socket=/tmp/mysql57.sock
log-bin=/usr/local/mysql57/mysql-bin
server-id=2
[mysqld_safe]
log-error=/usr/local/mysql57/data/error.log
pid-file=/usr/local/mysql57/data/mysqld.pid
tmpdir=/tmp/mysql57
chmod 755 my.cnf
对照以下内容,修改/usr/local/mysql57/support-files/mysql.server文件:
vim /usr/local/mysql57/support-files/mysql.server
……
basedir=/usr/local/mysql57
datadir=/usr/local/mysql57/data
……
lockdir='/var/lock/subsys'
lock_file_path="$lockdir/mysql57"
……
mysqld_pid_file_path=/usr/local/mysql57/data/mysqld.pid
……
conf=/usr/local/mysql57/my.cnf
……
将修改之后的文件复制到/etc/init.d/目录,再将复制过去的文件重命名为mysql57:
cp /usr/local/mysql57/support-files/mysql.server /etc/init.d/
mv /etc/init.d/mysql.server /etc/init.d/mysql57
添加mysql用户和用户组,修改MySQL安装目录的所有者:
groupadd mysql
useradd mysql -g mysql
chown mysql:mysql /usr/local/mysql57/
初始化MySQL5.7,记得保存如下图框出来位置的初始化密码,登录的时候要用这个密码登录:
/usr/local/mysql57/bin/mysqld --defaults-file=/usr/local/mysql57/my.cnf --user=mysql --initialize
MySQL5.7就算是安装完毕了。
启动MySQL5.7:
service mysql57 start
#登录MySQL5.7
#因为要同时安装5.7和8.0,所以要选择登录的是哪个目录下的MySQL,5.7的目录是mysql57、端口号是3306。这些内容都是在配置文件中定义的。指定本地IP是使用tcp/ip方式登录,也可以通过指定socket文件的方式登录。
#socket本地登录:
#/usr/local/mysql80/bin/mysql -S/tmp/mysql57.sock -uroot -p
#tcp/ip登录:
#/usr/local/mysql80/bin/mysql -uroot -p -h127.0.0.1 -P3306
#每一次输这么长有点麻烦,我们可以配置直接使用 mysql57命令登录:
#系统默认在 /usr/bin 目录下查找命令,所以在 /usr/bin 目录下给 mysql57 的启动程序设置一个软链接(类似Windows的快捷方式),再将软链接的名称改一下,/usr/bin/目录下5.7的mysql软链接名字改成mysql57,方便区分5.7和8.0。
ln -s /usr/local/mysql57/bin/mysql /usr/bin
mv /usr/bin/mysql /usr/bin/mysql57
#测试一下,查看安装的MySQL版本号
mysql57 -V
#登录(输入密码不显示,直接粘贴原先的初始化密码回车就行)
mysql57 -uroot -p -S/tmp/mysql57.sock
#更改root用户的默认密码为333333
mysql> set password for 'root'@'localhost'='333333';
#退出
mysql> exit
MySQL8.0安装步骤
把安装包解压、重命名,移动到/usr/local/目录:
cd ~
tar -xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.32-linux-glibc2.12-x86_64/ mysql80/
mv mysql80/ /usr/local/
在MySQL安装目录下创建存储数据库数据的新目录data/:
cd /usr/local/mysql80/
mkdir data
新建编辑my.cnf文件并赋予执行权限(MySQL8.0的配置文件):
cd /usr/local/mysql80/
vim my.cnf
[mysqld]
basedir=/usr/local/mysql80/
datadir=/usr/local/mysql80/data/
port=3307
socket=/tmp/mysql80.sock
character-set-server=UTF8MB4
symbolic-links=0
log-bin=/usr/local/mysql80/mysql-bin
server-id=1
gtid_mode=on
enforce_gtid_consistency=on
[mysqld_safe]
log-error=/usr/local/mysql80/data/error.log
pid-file=/usr/local/mysql80/data/mysqld.pid
tmpdir=/tmp/mysql80
chmod 755 my.cnf
对照以下内容,修改/usr/local/mysql80/support-files/mysql.server文件:
vim /usr/local/mysql80/support-files/mysql.server
……
basedir=/usr/local/mysql80
datadir=/usr/local/mysql80/data
……
lockdir='/var/lock/subsys'
lock_file_path="$lockdir/mysql80"
……
mysqld_pid_file_path=/usr/local/mysql80/data/mysqld.pid
……
conf=/usr/local/mysql80/my.cnf
……
将修改之后的文件复制到/etc/init.d/目录,再将复制过去的文件重命名为mysql80:
cp /usr/local/mysql80/support-files/mysql.server /etc/init.d/
mv /etc/init.d/mysql.server /etc/init.d/mysql80
添加mysql用户和用户组,修改MySQL安装目录的所有者:
groupadd mysql
useradd mysql -g mysql
chown mysql:mysql /usr/local/mysql80/
初始化MySQL8.0,记得保存如下图框出来位置的初始化密码,登录的时候要用这个密码登录:
/usr/local/mysql80/bin/mysqld --defaults-file=/usr/local/mysql80/my.cnf --user=mysql --initialize
MySQL8.0就算是安装完毕了。
启动MySQL8.0(输入密码不显示,直接粘贴原先的初始化密码就行)(5.7和8.0类似):
service mysql80 start
#登录MySQL8.0
#因为要同时安装5.7和8.0,所以要选择登录的是哪个目录下的MySQL,8.0的目录是mysql80、端口号是3307。这些内容都是在配置文件中定义的。指定本地IP是使用tcp/ip方式登录,也可以通过指定socket文件的方式登录。
#socket本地登录:
#/usr/local/mysql80/bin/mysql -S/tmp/mysql80.sock -u root -p
#tcp/ip登录:
#/usr/local/mysql80/bin/mysql -u root -p -h 127.0.0.1 -P 3307
#可以配置直接使用 mysql80 登录:
#系统默认在 /usr/bin 目录下查找命令,所以在 /usr/bin 目录下给 mysql80 的启动程序设置一个软链接(类似Windows的快捷方式),再将软链接的名称改一下,/usr/bin/目录下8.0的mysql软链接名字改成mysql80,方便区分5.7和8.0。
ln -s /usr/local/mysql80/bin/mysql /usr/bin
mv /usr/bin/mysql /usr/bin/mysql80
#测试一下,查看安装的MySQL版本号
mysql80 -V
#登录(输入密码不显示,直接粘贴原先的初始化密码回车就行)
mysql80 -uroot -p -S/tmp/mysql80.sock
修改root用户的密码为333333:
#更改root用户的默认密码为333333
mysql> set password for 'root'@'localhost'='333333';
#退出
mysql> exit
允许其他所有机器连接本机MySQL8.0,这样物理机的Navicat就可以连接虚拟机的MySQL8.0了,改完之后用第二条语句刷新一下权限,现在就可以在物理机上连接了:
mysql> use mysql;
mysql> update user set host='%' where user='root' and host='localhost'; #允许所有机器连接本虚拟机的MySQL
mysql> flush privileges; #刷新权限
mysql> select user,host from user;
如果Mysql8.0正常启动但是Navicat无法连接:
- 先检查主机地址和端口号和实际的是否相符;
- 如果所有配置都正确那可能就是虚拟机的防火墙原因,可以开放对应端口号或者关闭防火墙:
开放3307端口号:
firewall-cmd --list-all #查看防火墙开放的端口号
firewall-cmd --zone=public --add-port=3307/tcp –permanent #设置端口号3307开放
firewall-cmd –reload #重启防火墙
firewall-cmd --list-all #再次查看,可以看到3307已经开放
关闭防火墙
systemctl status firewalld #查看防火墙状态
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #设置防火墙不开机不会自启动(默认的是开机自启动)
重新连接Navicat,连接成功。
转自:https://blog.csdn.net/qq_45855805/article/details/130015191
我本地安装时的问题
我本地mysql5.7是以前rpm安装好了的,这次新增mysql8.0,所有使用了解压安装模式,就上面的安装步骤。如果使用service模式启动会报错,因为mysql5.7已经启动了,我就没有做服务启动,直接命令启动
cd /usr/local/mysql80
/usr/local/mysql80/bin/mysqld --defaults-file=/usr/local/mysql80/my.conf --user=mysql --initialize
/usr/local/mysql80/bin/mysqld_safe --defaults-file=/usr/local/mysql80/my.conf &
/usr/local/mysql80/bin/mysql -uroot -p -P3308 -h127.0.0.1
需要特别注意就是mysql8的密码问题,已经使用新的密码插件,SQLyog老版本不支持,可以使用
https://my.oschina.net/lenglingx/blog/5120817
https://my.oschina.net/lenglingx/blog/3158217
Hphya0Wz4e?@
alter user 'root'@'localhost' identified by 'Hphya0Wz4e?@';
-- alter user 'root'@'localhost' identified by 'root__';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root__';
create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root__';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;
还可以借鉴下CentOS7 + MySQL8.0
下载安装包
- 点击进入MySQL Community Server 8.0.29 官网下载地址
- 点击下拉选择
Linux - Generic
,找到名为mysql-8.0.29-linux-glibc2.12-x86_64.tar.xz
点击下载即可
简化版命令步骤
给我自己的提醒:原来的mysql5.7
配置基本没有动,服务也没有关,下面的命令都是关于mysql8.0
的,原mysql5.7
的配置文件在/etc/my.cnf
- 解压xz文件为tar文件,注意命令无过程显示需要等待窗口跳至下一行
xz -d /usr/soft/sort/mysql-8.0.29-linux-glibc2.12-x86_64.tar.xz -C /usr/soft/sort/
tar -xvf /usr/soft/sort/mysql-8.0.29-linux-glibc2.12-x86_64.tar -C /usr/soft/install/
- 赋予权限
chown -R mysql.mysql /usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64
- 修改配置文件
vi /usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/my.cnf
[client]
port=3307
# mysql57 不要这个
mysqlx_port=33070
socket=/tmp/mysql80.sock
# mysql57 不要这个
mysqlx_socket=/tmp/mysqlx80.sock
[mysqld]
# skip-grant-tables
# mysql安装目录
basedir=/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64
# mysql数据库目录
datadir=/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/data
port=3307
innodb_file_per_table=1
character-set-server=utf8
# mysql57 不要这个
mysqlx_port=33070
socket = /tmp/mysql80.sock
# mysql57 不要这个
mysqlx_socket=/tmp/mysqlx80.sock
[mysqld_safe]
# 错误日志
log-error=/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/data/error.log
# pid文件
pid-file=/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/data/mysqld.pid
tmpdir=/tmp/mysql80
- 赋予配置文件权限
chmod 755 /usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/my.cnf
- 修改连接服务文件
vi /usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/support-files/mysql.server
# 这两项在开头比较好找
basedir=/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64
datadir=/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/data
# 这项默认的不用找
lockdir='/var/lock/subsys'
# 这项默认有但是需要在最后改个80
lock_file_path="$lockdir/mysql80"
# 下面两个藏在下面细心的找一下
mysqld_pid_file_path=/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/data/mysqld.pid
conf=/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/my.cnf
- 复制注册连接服务文件
cp -i /usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/support-files/mysql.server /etc/init.d/mysql80
- 初始化mysql80
/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/my.cnf --user=mysql --initialize
- root@localhost: 初始密码
- 启动mysql80服务
service mysql80 start
,然后要记得开放防火墙的3307端口才能使用外部连接 - 登录
/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/bin/mysql --socket=/tmp/mysql80.sock -u root -p'初始密码'
- 重置密码,登录后依次执行命令
flush privileges;
- 注意:新版本mysql8后,不再支持
password()
方法,只能通过alter
语句进行修改 ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
- 如果不行可以试试
ALTER USER 'root'@'%' IDENTIFIED BY '你的密码';
use mysql;
update user set host='%' where user='root' and host='localhost';
flush privileges;
- 查看占用端口
show global variables like 'port';
,如果发现为0,需要执行以下步骤修改
- 停止服务:
service mysql80 stop
- 修改配置文件:
vi /usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/my.cnf
,将 [mysqld] 下的 skip-grant-tables 注释 - 重新启动服务:
service mysql80 start
开启3307端口流程
cd /etc/sysconfig
进入该目录,检查是否存储了iptables
文件vim iptables
使用vim编辑器
修改iptables
文件,按下i
进入编辑模式- 在初始端口那行下面添加
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3307 -j ACCEPT
,开放3307端口 service iptables restart
重启防火墙即可
如何mysql80服务启动失败
可以参考一下步骤重新初始化数据库,亲测有效
- 删除data文件夹
rm -rf /usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/data
- 新建data目录
mkdir /usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/data
- 赋予权限
chown -R mysql.mysql /usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64
- 重新初始化
/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/usr/soft/install/mysql-8.0.29-linux-glibc2.12-x86_64/my.cnf --user=mysql --initialize
- 测试启动服务
service mysql80 start
,成功即可