学习笔记022——Ubuntu 安装 MySQL8.0版本踩坑记录
目录
1、查看可安装 MySQL 版本
2、Ubuntu安装 MySQL8.0
3、MySQL8.0 区分大小写问题
4、MySQL8.0 设置sql_mode
5、MySQL8.0 改端口33060(个人遇到问题)
1、查看可安装 MySQL 版本
## 列出可用的MySQL版本(列出所有可用的MySQL版本以及其安装状态)
apt-cache policy mysql-server
2、Ubuntu安装 MySQL8.0
# 更新
sudo apt-get update
# 安装指定版本的MySQL
sudo apt install mysql-server=<version>
# 修改配置。
sudo mysql_secure_installation
# 根据引导提示,进行选择:
Validate Password Component … (使用密码强度校验组件) n
New Password:(设置新密码,并重复一遍)
Remove anonymous users(删除匿名用户)y
Disallow root login remotely(拒绝远程root账号登录)n
Remove test database and access to it(移除test数据库) y
Reload privilege tables now(现在就重新载入权限表) y
# 登录
sudo mysql -uroot -p
# 插入root密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by'你的密码';
# 退出
exit
# 编辑mysql配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 注释下行(开启远程访问)
bind-address=127.0.0.1
# wq保存退出
# 登录
sudo mysql -uroot -p
# 在mysql中依次执行下述sql语句
use mysql;
update user set Host='%' where User='root';
select User, Host from user;
# 查询结果
+------------------+-----------+
| User | Host |
+------------------+-----------+
| root | % |
| uav | % |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
# 刷新
flush privileges;
3、MySQL8.0 区分大小写问题
如果需要设置不区分数据大小写,需要注意的是:mysql8之后,lower_case_table_names参数要在初始化数据库时设置,已经初始化的数据库无法修改了!
只能删除已经初始化的数据,重新初始化时加上参数lower_case_table_names!!!!
mysql 8.0默认区分大小写,但有些系统要求大小写不区分,但已经有数据库的情况就比较麻烦,因为改为不区分大小写需要重建数据库,没有其它办法!
PS:特别注意!!!执行以下操作之前,一定要记得备份重要数据库!出现损失概不负责!
PS:特别注意!!!执行以下操作之前,一定要记得备份重要数据库!出现损失概不负责!
PS:特别注意!!!执行以下操作之前,一定要记得备份重要数据库!出现损失概不负责!
PS:特别注意!!!执行以下操作之前,一定要记得备份重要数据库!出现损失概不负责!
关闭服务
sudo systemctl stop mysql.service
# 删除目前的所有数据库,
# 再次强调!一定要记得备份数据库!!!!数据丢失不负责!!!!
# 再次强调!一定要记得备份数据库!!!!数据丢失不负责!!!!
# 再次强调!一定要记得备份数据库!!!!数据丢失不负责!!!!
# 再次强调!一定要记得备份数据库!!!!数据丢失不负责!!!!
# 删除相关
sudo rm -rf /var/lib/mysql
sudo mkdir /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql
sudo chmod 700 /var/lib/mysql
# 编辑配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 将 lower_case_table_names=1 加到 [mysqld] (必须添加,不然重新初始化mysql会失败)
lower_case_table_names=1
# lower_case_table_names=1表示不区分大小写
# 重新初始化mysql(会生成新的数据库密码)相当于重装mysql了
sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --lower_case_table_names=1 --user=mysql --console
# 启动服务
sudo systemctl start mysql.service
# 查看临时root密码
sudo grep 'temporary password' /var/log/mysql/error.log
# 输入上面获得的临时root密码
sudo mysql -u root -p
# mysql要求修改密码,这里主动改一下
alter user 'root'@'localhost' IDENTIFIED BY '你的新密码';
# 根据向导删除远程链接等
sudo mysql_secure_installation
# 根据引导提示,进行选择:
Validate Password Component … (使用密码强度校验组件) n
New Password:(设置新密码,并重复一遍)
Remove anonymous users(删除匿名用户)y
Disallow root login remotely(拒绝远程root账号登录)n
Remove test database and access to it(移除test数据库) y
Reload privilege tables now(现在就重新载入权限表) y
# 检查效果
sudo mysql -u root -p
SHOW VARIABLES LIKE 'lower_case_%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 1 |
+------------------------+-------+
################# 远程连接问题 ########################
# 编辑mysql配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 修改
bind-address=0.0.0.0
# 进入数据库
sudo mysql -uroot -p
# 在mysql中依次执行下述sql语句
use mysql;
update user set Host='%' where User='root';
select User, Host from user;
# 查询结果
+------------------+-----------+
| User | Host |
+------------------+-----------+
| root | % |
| uav | % |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
# 刷新
flush privileges;
4、MySQL8.0 设置sql_mode
# 编辑配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 插入下面配置:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
说明在mysql8中,有的人会重启失败。可能是sql_mode中你添加了 NO_AUTO_CREATE_USER
那么,就把 sql_mode 中的 NO_AUTO_CREATE_USER 去掉,就成功解决了。
原因 NO_AUTO_CREATE_USER 在mysql8中已经不支持。
服务重启后,修改后校验:
systemctl restart msyql
mysql -uroot -p
select @@global.sql_mode;
5、MySQL8.0 改端口33060(个人遇到问题)
本人安装MySQL8.0版本时,有需求要将端口由默认是3306改成33060。
发现改死活改不了。只要改成了33060服务就重启失败。
以下是本人的最终解决方案:
1、MySQL8.0除了默认的3306端口之外,还会有个33060端口。3306端口是IPv4,而33060是IPv6。
2、mysqlx=0 只要在Linux系统下的/etc/mysql/mysql.conf.d/mysqld.cnf中,增加这个"mysqlx=0",
3、然后重启,33060和IPv6的字样,从进程中消失了。
4、它的原理就是,MySQL8.0增加了IPv6支持,然后这个配置项可以关闭掉。
vim /etc/mysql/mysql.conf.d/mysqld.cnf
如上图。将端口改成33060后,在添加一个 mysqlx=0的配置。
格式最好和图中的一样。
然后重启服务就能修改成功了。
🆗了,这就是我的踩坑记录。祝各位好运!
生命不息,折腾不止!