1. 安装MySQL
# 第一步:更新源
$ sudo apt-get update
# 第二步:安装MySQL服务
$ sudo apt-get install mysql-server
# 第三步:检查安装版本(2021.8.5默认安装版本)
$ mysql --version
mysql Ver 8.0.26-0ubuntu0.20.04.2 for Linux on x86_64((Ubuntu))
# 第四步:检查MySQL运行状态
$ systemctl status mysql
2. 存在问题
MySQL数据库名和表名默认是区分大小写的,官方文档建议在初始化数据库是设置
lower_case_table_names=1
,并且修改/etc/mysql/mysql.conf.d/mysqld.cnf
文件也添加lower_case_table_names=1
,但是修改完之后服务起不来了。在网上找了很多教程,有删除/var/lib/mysql
目录再修改/etc/mysql/mysql.conf.d/mysqld.cnf
,但是最后都失败了。同样的都是服务不能起来。很郁闷!!!!强迫症表示必须解决这个问题,于是疯狂找解决方案。
于是找到了以下解决方案,使用于初次安装时使用,若使用后再需要修改,请先进行数据备份。
# 第一步:停止MySQL服务
$ systemctl stop mysql
# 第二步:备份配置文件
$ sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup
# 第三步:停止服务
$ sudo service mysql stop
# 第四步:卸载刚安装的MySQL
$ sudo apt-get --purge autoremove mysql-server
# 第五步:删除目录/var/lib/mysql
$ sudo rm -rf /var/lib/mysql
# 第六步:还原配置文件
$ sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf.backup /etc/mysql/mysql.conf.d/mysqld.cnf
# 第七步:编辑配置文件
# 在[mysqld]下添加lower_case_table_names=1
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 第八步:重新安装MySQL
$ sudo apt-get install mysql-server
# 安装过程中提示
# 配置文件 '/etc/mysql/mysql.conf.d/mysqld.cnf'
# ==> 系统中的这个文件或者是由您创建的,或者是由脚本建立的。
# ==> 软件包维护者所提供的软件包中也包含了该文件。
# 您现在希望如何处理呢? 您有以下几个选择:
# Y 或 I :安装软件包维护者所提供的版本
# N 或 O :保留您原来安装的版本
# D :显示两者的区别
# Z :把当前进程切换到后台,然后查看现在的具体情况
# 默认的处理方法是保留您当前使用的版本。
# *** mysqld.cnf (Y/I/N/O/D/Z) [默认选项=N] ?
# 选择N,使用自定义的文件版本
# 第九步:重启服务
$ systemctl start mysql
# 查看服务状态
$ systemctl status mysql
相信各位看到这里就已经明白了,就是需要安装时提前准备好配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
,若提前准备,应该可以不用重复安装两次。
本人没有尝试
3. 初始化配置
执行命令
$ sudo mysql_secure_installation
以下过程就不上截图了,此版本步骤依次是(我的设置):
- 是否对密码进行强校验?选择N,不会
- 填写root用户密码
- 是否移除匿名用户?选择Y,移除
- 是否允许root用户进行远程连接?选择Y,允许
- 是否删除test数据库?选择N,不删除
- 是否设置权限立即生效?选择Y,立即生效
4. 本地尝试登录
$ sudo mysql -u root -p # 输入root用户密码
检查修改的默认区分大小写的配置是否修改成功
mysql> SHOW VARIABLES LIKE 'lower_case_%';
已生效!!!!!!!!!!!!!!!!
5. 配置远程访问
在Ubuntu下MySQL缺省是只允许本地访问的,使用workbench连接工具是连不上的;
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
#找到 bind-address 修改值为 0.0.0.0(如果需要远程访问)
# 重启mysql
$ systemctl restart mysql
修改MySQL数据库root用户的访问限制
$ sudo mysql -u root -p # 输入root用户密码
mysql> use mysql;
# 修改root用户的访问限制
mysql> update user set host='%' where user='root';
mysql> flush privileges;
正常情况下此时就应该可以远程访问了,但是偏偏就不让我开心一会 -_-|||
查看防火墙是否正常,一般情况下,关闭防火墙即可。
# 查看防火墙状态
$ sudo ufw status
# 关闭防火墙
$ sudo ufw disable
# 开启防火墙
$ sudo ufw enable
MySQL 8 中用户密码加密方式变化导致远程连接失败。
mysql> alter user 'root'@'%' identified by '123456' password expire never;
mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
mysql> flush privileges;
此时,我终于可以正常进行数据库远程操作了!
心累。