ubuntu安装mysql8

二进制安装

 1# 列出所有已安装的包:
 2apt list --installed
 3# 查询系统是否安装了mariadb:
 4sudo dpkg -l | grep maria
 5
 6# 安装 mysql 依赖
 7sudo apt install libaio1 libaio-dev libncurses5 libncurses5-dev
 8
 9# 下载 mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz,然后解压到 /data
10tar -xvJf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz -C /data
11
12# 创建软连接
13ln -s /data/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local/mysql
14
15# 创建mysql 用户和组,并设置禁止登陆系统
16groupadd mysql
17useradd -r -g mysql -s /bin/false mysql
18
19# 创建数据目录,并修改数据目录的用户及用户组
20mkdir -p /data/mysql-data
21chown -R mysql:mysql /data/mysql-data
22
23# 初始化数据库(任选其一,本文以无密码初始化方式)
24# 有密码初始化(会在控制台输出临时密码,官方推荐该方式):
25mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql-data --initialize
26# 无密码初始化(方便,但密码自行需要修改):
27mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql-data --initialize-insecure

配置

MySQL启动时读取配置文件的顺序,按照以下优先级(数字小的优先级高):

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/local/mysql/etc/my.cnf
  4. ~/.my.cnf

若没有设置使用指定目录下的my.cnf文件,或者没有读取到默认的配置文件,则表示mysql启动时并没有加载配置文件,而是使用的默认配置。

my.cnf 最基础的配置示例

新建/etc/my.cnf,内容如下:

 1[mysql]
 2default-character-set=utf8mb4
 3
 4[client]
 5port=3306
 6default-character-set=utf8mb4
 7#socket=/var/lib/mysql/mysql.sock
 8
 9[mysqld]
10user=mysql
11port=3306
12basedir=/usr/local/mysql
13datadir=/data/mysql-data
14character-set-server=utf8mb4
15#socket=/var/lib/mysql/mysql.sock
16# 如果是开发环境,下面的配置可以有效降低mysql的内存占用
17performance_schema_max_table_instances=400
18table_definition_cache=400
19table_open_cache=256
20performance_schema=off

一般来说,单实例只要设置mysqld中的 port、basedir、datadir、character-set-server 即可

数据库的启动和关闭

启动

启动数据库服务(以下任选其一):

 1# 以守护进程方式启动:
 2mysqld_safe & 
 3
 4# 普通方式启动:
 5mysqld &
 6
 7# 如果my.cnf不在mysql指定的目录下,需要指定启动参数,例如:
 8mysqld_safe --defaults-file=/app/conf/my.cnf & 
 9
10# 或者:
11mysqld --defaults-file=/app/conf/my.cnf &

初始化

首次登录方式(因为本文是以无密码初始化,所以首次登录不需要密码)

 1mysql
 2#登录后,可修改 root 初始化密码:
 3alter user 'root'@'localhost' identified with mysql_native_password by '123456';
 4
 5# 创建 sa@% 用于远程登录:
 6create user 'sa'@'%' identified with mysql_native_password by 'hello,zhangcong';
 7grant all privileges on *.* to 'sa'@'%' with grant option;
 8
 9# 刷新用户权限:
10flush privileges;

关闭数据库服务

1mysqladmin shutdown -u root -p

安装系统服务

 1sudo vi /etc/systemd/system/mysql.service
 2## 内容如下:
 3[Unit]
 4Description=mysql
 5After=network.target
 6
 7[Service]
 8Type=forking
 9ExecStart=/usr/local/mysql/support-files/mysql.server start
10ExecReload=/usr/local/mysql/support-files/mysql.server restart
11ExecStop=/usr/local/mysql/support-files/mysql.server stop
12PrivateTmp=true
13
14[Install]
15WantedBy=multi-user.target