在Ubuntu20.04上安装MySQL8.0及正确配置[已验证]
Ubuntu在20.04版本中,源仓库中MySQL的默认版本已经更新到8.0。因此可以直接安装。
安装MySQL
sudo apt-get update #更新源
sudo apt-get install mysql-server #安装
create database swtest;
create user 'swadmin'@'%' identified by 'P@ssw0rd@sw';
grant all privileges on *.* to 'swadmin'@'%' with grant option;
flush privileges;
- 1
- 2
验证
安装完成后,可以通过下面的命令来查看时候安装成功:
systemctl status mysql
- 1
看到上面的信息就说明MySQL已经安装好并运行起来了。
登陆MySQL
- 以root用户登陆
sudo mysql -u root -p # -u 指定用户名 -p需要输入密码
- 1
或者:
sudo mysql #可以不需要指定用户名密码
- 1
已经成功连接到数据库服务器了。那接下来我们看看这里都有哪些databases.
mysql>show databases;
- 1
MySQL安装好后有默认的这几个数据库。其中mysql里有user表,这个表里放了user、host相关的一些信息。通过下面的命令看到这个表。
mysql> show tables from mysql;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
33 rows in set (0.00 sec)
mysql> select User, Host from mysql.user;
+------------------+-----------+
| User | Host |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
这里root就是我们刚才连接的账户。debian-sys-maint
账号是在安装MySQL自动产生的,可以通过下面的命令查看到它。
sudo cat /etc/mysql/debian.cnf
- 1
创建db
mysql> create database db_test;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| db_test |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
- 此时数据库里还没有任何表:
mysql> use db_test;
Database changed
mysql> show tables;
Empty set (0.00 sec)
我们需要创建一个表(t_test):
mysql> create table t_test (id int, name varchar(20));
Query OK, 0 rows affected (0.08 sec)
插入数据:
mysql> insert into t_test(id, name) values(1, "A");
解决workbench连接的问题
发现没有权限:
MySQL8.0的版本更改了root账户的授权方式,默认是auth_socket。也就是说需要通过 Unix socket 文件来验证所有连接到localhost的用户,不能使用提供密码的方式了。我们需要通过下面的指令更一下授权方式。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BT 'root的密码';
Query OK, 0 rows affected (0.01 sec)
然后再使用workbench重新Test Connection
,连接正常。
对workbench不能使用root访问数据库的问题,上面的方案是修改root的默认授权方式。
有网友讲还可以使用另外一个方案来解决:
- 先创建另外一个账户(如admin),
mysql> create user 'admin'@'localhost' identified by 'admin'; # 创建admin
- 1
- 给予这个账户(admin)最大的权限,然后workbench就可以使用admin账户访问数据库了。
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'admin'
- 1
经验证, GRANT
特性MySQL8.0
之前的版本里有的,MySQL8.0
版本已不再支持,不能再使用GRANT
来提升权限了。
因此只能使用前面介绍的更改默认授权方式了。
小结
至此,已经可以在ubuntu上正常使用mysql 8.0
版本了。mysql 8.0
更改了默认的授权方式,移除了grant
权限特性。对其它方面的改进需进一步挖掘。
好记性不如烂笔头,写此博文只为备忘。如能帮到有需要的小伙伴,那将是我的荣幸。
另附一些mysql常用操作。
常用操作
sudo service mysql start # 启动mysql service
- 1
如何新增用户
CREATE USER 'admin'@'localhost' IDENTIFIED BY '你要设置的密码';
- 1
对新增的用户更改加密方式和密码
ALTER USER 'admin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';
- 1
卸载MySQL
sudo rm /var/lib/mysql/ -R
sudo rm /etc/mysql/ -R
sudo apt-get autoremove mysql* --purge
- 1
- 2
- 3
参考
-
https://www.mysql.com/why-mysql/white-papers/whats-new-mysql-8-0/
-
https://forum.ubuntu.org.cn/viewtopic.php?t=491034
-
https://www.jianshu.com/p/39a2b636b40a
-
https://blog.csdn.net/king921004/article/details/106184909/
-
https://blog.csdn.net/yunyexiangfeng/article/details/82876964?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase