LOADING

加载过慢请开启缓存 浏览器默认开启

在Ubuntu上安装Mysql(8.0)

1 前提条件

使用Ubuntu作为Linux服务器,方便调试和快速部署。
CentOS相关的安装过程有不同。

2 安装Mysql

执行命令

sudo apt update # 更新软件
sudo apt install mysql-server # 安装mysql

安装成功后,Mysql服务会立刻启动。输入

sudo systemctl status mysql

系统输出

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun xxxx-xx-xx xx:xx:xx CST; 23s ago
    Process: 3778 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0>
   Main PID: 3786 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 4551)
     Memory: 366.0M
        CPU: 820ms
     CGroup: /system.slice/mysql.service
             └─3786 /usr/sbin/mysqld

3 修改配置文件

这里点出一个很多人踩过的,网上也有很多教程但是众说纷坛的坑:lower_case_table_names = 1。

很多后端业务通常是大小写不敏感的,例如定时任务中间件qrtz等等,要引入这些组件就需要设置数据库大小写不敏感。

为什么说它是个坑呢,因为Linux的mysql默认lower_case_table_names = 0, 而且一旦mysql下载完成就直接初始化并运行。
而且一旦mysql初始化之后,再去修改配置文件,mysql就会直接报错,或者配置文件根本不生效。这就导致想要修改配置文件,让他兼容某些
后端业务组件非常困难。

这里以lower_case_table_names为例,给出一个修改配置文件较为简单有效的方法。

3.1 前提假设

操作系统:Ubuntu22.04

数据库:Mysql8.0

安装方法:假设你是使用前一节介绍的安装方法安装的mysql。

纯净式卸载:如果你因为自己某些操作,已经把mysql环境“玩坏了”,可以使用以下命令行卸载mysql。

# 确保你有root权限,依次输入即可
sudo apt purge mysql-*
sudo rm -rf /etc/mysql/ /var/lib/mysql
sudo apt autoremove
sudo apt autoclean

3.2 安装VIM

我们使用vim修改配置文件,如果没有vim,请先安装

sudo apt install vim

3.3 修改配置文件

这里的前提条件是,你按照前一节的操作方法,安装好了mysql,而且mysql正在运行。

3.3.1 停用mysql

sudo systemctl stop mysql

3.3.2 打开配置文件

注意!!!

很多教程会让你打开/etc/my.cnf或者/etc/mysql/my.cnf文件,这些文件是老版本的mysql的配置文件。
新版本的配置文件有变化,你打开/etc/mysql/my.cnf文件,可能看到以下内容。

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

这表示实际配置文件在/etc/mysql/mysql.conf.d/目录里面。
如果之前没有特殊设置,我们可以在/etc/mysql/mysql.conf.d/mysqld.cnf里面找到很多配置信息,例如我的配置信息如下。

#
# The MySQL database server configuration file.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

[mysqld]
#
# * Basic Settings
#
user            = mysql
# pid-file      = /var/run/mysqld/mysqld.pid
# socket        = /var/run/mysqld/mysqld.sock
# port          = 3306
# datadir       = /var/lib/mysql
...还有很多

我们输入

vim /etc/mysql/mysql.conf.d/mysqld.cnf

打开配置文件

3.3.3 修改配置文件

在文末添加

lower_case_table_names=1 # 设置大小写不敏感

(这里多一嘴,可以修改bind-address = 0.0.0.0用来设置允许数据库外部链接)

之后使用esc:wq保存即可。

3.3.4 删除一些文件

这里我们需要删除一个文件夹下的所有文件,我试过很多次,只有删除该文件夹下的所有文件,再次初始化才不会报错。

这个文件夹是/var/lib/mysql,网上说该文件夹是mysql的目录,删这个相当于删库。但是因为目前我们连mysql都没有初始化,
里面没有任何数据,所以大胆去删。

执行命令

cd /var/lib/mysql

我们看一下这个文件夹下的内容:

ls
->
auto.cnf        ca-key.pem        GradsgnDev.pid       ibtmp1          performance_schema   sys
 binlog.000001   ca.pem           '#ib_16384_0.dblwr'  '#innodb_redo'   private_key.pem      undo_001
 binlog.000002   client-cert.pem  '#ib_16384_1.dblwr'  '#innodb_temp'   public_key.pem       undo_002
 binlog.000003   client-key.pem    ib_buffer_pool       mysql           server-cert.pem
 binlog.index    debian-5.7.flag   ibdata1              mysql.ibd       server-key.pem

递归删除所有文件

sudo rm -rf * # 一定得在`/var/lib/mysql`里面,不然系统可能直接嗝屁了!!!

3.3.5 初始化数据库

删除这些文件后,再执行初始化数据库。

mysqld --initialize --lower-case-table-names=1  --user=mysql

再次运行

systemctl start mysql

就不会报错了。而且此时我们的数据库也是大小写不敏感的。

修改root用户密码

默认安装的时候是没有设置密码的,我们通常在root用户下直接输入mysql就会进入数据库。但是为了安全性和远程链接保证,还是需要配置密码的。
进入数据库后。

use mysql; # 切换数据库
alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password
    BY '你的新密码';

设置密码后,再次登录数据库就需要换一下命令。

mysql -u root -p # -u后面跟用户名,-p表示输入密码
# 之后根据提示输入密码就能登录了

设置数据库远程登录

我们的数据库有可能没有和后端服务启动在同一主机上,或者有时候可能需要使用Navicat远程链接数据库进行调试,
这个时候就需要配置远程登录,因为使用root用户是无法远程登录数据库的。

配置文件

配置文件修改一节中,我们曾将band-address修改为0.0.0.0,这是远程登录的基本配置。

新增远程登录用户

一般不建议修改本地root用户的远程登录权限,这里我们通过增加一个远程登录用户来配置mysql的远程登录。

  1. 首先本地登录数据库,查询一下mysql.user信息
use mysql;
show tables;
select host, user
from user;

会出现以下信息

+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)
  1. 创建用户

这里我创建名为telnet的用户

create user telnet@'%' identified by '用户密码';

其中%表示该用户允许从任何ip地址登录,如果你想更安全一点,可以设置固定的ip地址

  1. 给用户授权
grant all privileges on *.* to telnet@'%' with grant option;

all代表接受所有操作,比如 select,insert,delete….;
. 代表所有库下面的所有表;
% 代表这个用户允许从任何地方登录;

  1. 刷新权限
flush privileges;
  1. 查询用户信息
select host, user
from user;

系统返回

+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | telnet           |
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+

可以看到,远程登录用户telnet已经存在

  1. 使用Navicat登录即可。