安装MySQL

sudo apt-get update #更新源
sudo apt-get install mysql-server #安装

验证

安装完成后,可以通过下面的命令来查看时候安装成功:
systemctl status mysql

  1. mysql.service - MySQL Community Server
  2. Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
  3. Active: active (running) since Wed 2021-01-06 15:17:35 CST; 29s ago
  4. Main PID: 13082 (mysqld)
  5. Status: "Server is operational"
  6. Tasks: 38 (limit: 2441)
  7. Memory: 330.3M
  8. CGroup: /system.slice/mysql.service
  9. └─13082 /usr/sbin/mysqld

看到上面的信息就说明MySQL已经安装好并运行起来了。

登陆MySQL

以root用户登陆
sudo mysql -u root -p # -u 指定用户名 -p需要输入密码

或者:
sudo mysql #可以不需要指定用户名密码

  1. Welcome to the MySQL monitor. Commands end with ; or \g.
  2. Your MySQL connection id is 8
  3. Server version: 8.0.22-0ubuntu0.20.10.2 (Ubuntu)
  4. Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  5. Oracle is a registered trademark of Oracle Corporation and/or its
  6. affiliates. Other names may be trademarks of their respective
  7. owners.
  8. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

已经成功连接到数据库服务器了。那接下来我们看看这里都有哪些databases.
mysql>show databases

  1. mysql> show databases;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | sys |
  9. +--------------------+
  10. 4 rows in set (0.01 sec)

MySQL安装好后有默认的这几个数据库。其中mysql里有user表,这个表里放了user、host相关的一些信息。通过下面的命令看到这个表。
mysql>show tables from mysql;

  1. mysql> show tables from mysql;
  2. +----------------------------------------------+
  3. | Tables_in_mysql |
  4. +----------------------------------------------+
  5. | columns_priv |
  6. | component |
  7. | db |
  8. | default_roles |
  9. | engine_cost |
  10. | func |
  11. | general_log |
  12. | global_grants |
  13. | gtid_executed |
  14. | help_category |
  15. | help_keyword |
  16. | help_relation |
  17. | help_topic |
  18. | innodb_index_stats |
  19. | innodb_table_stats |
  20. | password_history |
  21. | plugin |
  22. | procs_priv |
  23. | proxies_priv |
  24. | replication_asynchronous_connection_failover |
  25. | role_edges |
  26. | server_cost |
  27. | servers |
  28. | slave_master_info |
  29. | slave_relay_log_info |
  30. | slave_worker_info |
  31. | slow_log |
  32. | tables_priv |
  33. | time_zone |
  34. | time_zone_leap_second |
  35. | time_zone_name |
  36. | time_zone_transition |
  37. | time_zone_transition_type |
  38. | user |
  39. +----------------------------------------------+
  40. 34 rows in set (0.01 sec)

查看MySQL用户

mysql> select User, Host from mysql.user;

  1. mysql> select User, Host from mysql.user;
  2. +------------------+-----------+
  3. | User | Host |
  4. +------------------+-----------+
  5. | debian-sys-maint | localhost |
  6. | mysql.infoschema | localhost |
  7. | mysql.session | localhost |
  8. | mysql.sys | localhost |
  9. | root | localhost |
  10. +------------------+-----------+
  11. 5 rows in set (0.00 sec)

这里root就是我们刚才连接的账户。debian-sys-maint账号是在安装MySQL自动产生的,可以通过下面的命令查看到它。
sudo cat /etc/mysql/debian.cnf

  1. # Automatically generated for Debian scripts. DO NOT TOUCH!
  2. [client]
  3. host = localhost
  4. user = debian-sys-maint
  5. password = BOX3xverXydZorvn
  6. socket = /var/run/mysqld/mysqld.sock
  7. [mysql_upgrade]
  8. host = localhost
  9. user = debian-sys-maint
  10. password = BOX3xverXydZorvn
  11. socket = /var/run/mysqld/mysqld.sock

查看数据库端口

mysql> show global variables like 'port';

  1. mysql> show global variables like 'port';
  2. +---------------+-------+
  3. | Variable_name | Value |
  4. +---------------+-------+
  5. | port | 3306 |
  6. +---------------+-------+
  7. 1 row in set (0.02 sec)

创建db

mysql> create database db_test;

  1. Query OK, 1 row affected (0.01 sec)
  2. mysql> show databases;
  3. +--------------------+
  4. | Database |
  5. +--------------------+
  6. | db_test |
  7. | information_schema |
  8. | mysql |
  9. | performance_schema |
  10. | sys |
  11. +--------------------+
  12. 5 rows in set (0.00 sec)

此时数据库里还没有任何表:

  1. mysql> use db_test;
  2. Database changed
  3. mysql> show tables;
  4. Empty set (0.00 sec)

我们需要创建一个表(t_test):

  1. mysql> create table t_test (id int, name varchar(20));
  2. Query OK, 0 rows affected (0.08 sec)

插入数据:

  1. mysql> insert into t_test(id, name) values(1, "A");

Navicat连接虚拟机(Ubuntu)Mysql

查看虚拟机ip地址
ifconfig -a
inet后面为虚拟机ip地址
更多关于ifconfig命令的用法:ifconfig命令详细解释

  1. ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  2. inet 192.168.1.103 netmask 255.255.255.0 broadcast 192.168.1.255
  3. inet6 fe80::1859:19c8:5d47:afa6 prefixlen 64 scopeid 0x20<link>
  4. ether 00:0c:29:e6:9a:98 txqueuelen 1000 (以太网)
  5. RX packets 28543 bytes 38519716 (38.5 MB)
  6. RX errors 0 dropped 0 overruns 0 frame 0
  7. TX packets 18325 bytes 1763907 (1.7 MB)
  8. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  9. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  10. inet 127.0.0.1 netmask 255.0.0.0
  11. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  12. loop txqueuelen 1000 (本地环回)
  13. RX packets 340 bytes 32694 (32.6 KB)
  14. RX errors 0 dropped 0 overruns 0 frame 0
  15. TX packets 340 bytes 32694 (32.6 KB)
  16. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

授权mysql远程访问
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
可以看到mysql默认只能被本地监听。
将127.0.0.1改为0.0.0.0即可被外部访问。

  1. # * Basic Settings
  2. #
  3. user = mysql
  4. # pid-file = /var/run/mysqld/mysqld.pid
  5. # socket = /var/run/mysqld/mysqld.sock
  6. # port = 3306
  7. # datadir = /var/lib/mysql
  8. # If MySQL is running as a replication slave, this should be
  9. # changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
  10. # tmpdir = /tmp
  11. #
  12. # Instead of skip-networking the default is now to listen only on
  13. # localhost which is more compatible and is not less secure.
  14. bind-address = 127.0.0.1 #将127.0.0.1改为0.0.0.0
  15. mysqlx-bind-address = 127.0.0.1 #将127.0.0.1改为0.0.0.0
  16. #
  17. # * Fine Tuning

之后,在虚拟机中登陆mysql
mysql -u root -p
新增用户admin,密码为abc123

  1. mysql>CREATE USER 'admin'@'%' IDENTIFIED BY 'abc123';
  2. mysql> FLUSH PRIVILEGES;

Navicat Premium连接数据库
很多用户在使用Navicat Premium 12连接MySQL数据库时会出现Authentication plugin 'caching_sha2_password' cannot be loaded的错误。
出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password. 这里用第二种方式 ,解决方法如下
管理员权限运行命令提示符,登陆MySQL(记得添加环境变量)
mysql -u root -p
修改账户密码加密规则并更新用户密码

  1. mysql>ALTER USER 'admin'@'%' IDENTIFIED BY 'abc123' PASSWORD EXPIRE NEVER; #修改加密规则
  2. mysql>ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123'; #更新一下用户的密码
  3. mysql>FLUSH PRIVILEGES #刷新权限

单独重置密码命令:alter user 'admin'@'%' identified by 'aaa';
现在再次打开Navicat Premium 12连接MySQL问题数据库就会发现可以连接成功了