跳转至

MySQL安装

mysql下载地址

# 官网地址
https://dev.mysql.com/downloads/mysql/
# 国内的tsinghua镜像
https://mirror.tuna.tsinghua.edu.cn/mysql/
# 国内的huwei镜像
https://mirrors.huaweicloud.com/mysql/Downloads/

https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-8.0/mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz

Windows 系统下载的安装文件:

Linux 系统下载的安装文件:一般推荐用 Linux-Generic 这种源格式的安装文件。

1、windows 安装过程

下载mysql文件并解压到 D:/mysql 目录中,添加 D:/mysql/bin 到 PATH 系统环境变量中。在根目录创建 my.ini 配置文件,内容如下:

[client]
# 设置mysql客户端连接服务端时默认使用的端口
port = 3306 
[mysql]
# 设置mysql客户端默认字符集   
default-character-set=utf8 
[mysqld]
# mysql服务端默认监听(listen on)的TCP/IP端口号
port=3306 
# 基准路径,其他路径都相对于这个路径 
basedir="D:\mysql" 
# mysql数据库文件所在目录
datadir="D:\mysql\data" 
# 默认字符集 
character-set-server=utf8mb4
# 默认存储引擎
default-storage-engine=INNODB
# SQL模式为strict模式
# sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 
# mysql服务器支持的最大并发连接数(用户数)。如果设置得过小而用户比较多,会经常出现“Too many connections”错误。
max_connections=1024
# 禁用查询缓存,这个参数在5.7.20后已经Deprecated
# query_cache_size=0 
# 内存中的每个临时表允许的最大大小。如果临时表大小超过该值,临时表将自动转为基于磁盘的表(Disk Based Table)。
tmp_table_size=34M 
# 缓存的最大线程数。当客户端连接断开时,如果客户端总连接数小于该值,则处理客户端任务的线程放回缓存。在高并发情况下,如果该值设置得太小,就会有很多线程频繁创建,线程创建的开销会变大,查询效率也会下降。一般来说如果在应用端有良好的多线程处理,这个参数对性能不会有太大的提高。
thread_cache_size=8 
default_authentication_plugin = mysql_native_password

以管理员身份启动 cmd , 进行数据初始化:

mysql_install_db 这个程序在 MySQL 5.7.6 中已经弃用,因为它的功能已经集成在 mysqld 中了,所以在安装 5.7 及以后版本时,直接使用 mysqld --initialize 或者 mysqld --initialize-insecure 就可以直接初始化。在 5.7.5 之前,mysql_install_db 这个程序是用 perl 脚本写的,所以需要安装 perl ,5.7.5 之后,改为用 C++ 写的,并且可以直接做为二进制文件执行。

# 不安全的初始化,默认root密码为空,需要登陆后自己设置一个密码
mysqld --initialize-insecure --console
# 直接初始化,为root生成一个随机密码,密码打印在控制台中
mysqld --initialize --console

安装系统服务

mysqld -install MySQL --defaults-file="D:\mysql\my.ini" 

启动系统服务

net start mysql 

登陆并设置密码

mysql -u root -p
use mysql;
update user set authentication_string=PASSWORD("123456AWS!@#") where user="root";
flush privileges;
quit;

默认地,MySQL 会创建如下用户:

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.05 sec)

mysql>

用户管理

我们在创建数据库用户的时候都会指定host,即一个完整的用户可描述为 'username'@'host' 。

创建用户时不显式指定host则默认为%,%代表所有 ip 段都可以使用这个用户,我们也可以指定host为某个ip或ip段,这样会仅允许在指定的ip主机使用该数据库用户。

不过你也应该明白 'username'@'%' 和 'username'@'192.168.6.%' 是两个毫无关联的用户,这两个用户可以有不同的密码和权限,这里不建议创建多个同名不同host的用户,还有不要轻易更改用户的host。

2、Linux 安装过程

2.1 二进制安装

环境

  • GNU/Linux-x86_64
  • gcc 运行时环境
sudo yum -y install libaio libncurses*
sudo apt-get install libaio1 libaio-dev libncurses5

安装规范

配置项 值或路径
base目录 /usr/local/mysql
socket套接字文件 /data/mysql/mysql.sock
错误日志(启动日志) /data/mysql/error.log
进程文件 /data/mysql/mysql.pid
数据目录 /data/mysql/
字符集和排序规则 utf8mb4和utf8mb4_unicode_ci

用户和数据目录创建

$ groupadd mysql
$ useradd -r -g mysql -s /bin/false mysql
$ mkdir -p /data/mysql/{data,binlog} 
$ chown -R mysql:mysql /data/mysql

创建 /etc/my.cnf文件

这是最基本的配置文件,更详细的配置,可以参考相关mysql优化文档

[client]
port = 3306
socket = /data/mysql/mysql.sock
#default-character-set = utf8mb4

[mysql]
no-auto-rehash
default-character-set = utf8mb4

[mysqld]
#skip-grant-tables
log_timestamps=SYSTEM
user = mysql
port = 3306
basedir = /usr/local/mysql
log_error = /data/mysql/mysql.error
datadir = /data/mysql/data/
socket = /data/mysql/mysql.sock
pid-file = /data/mysql/db.pid
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
default_authentication_plugin = mysql_native_password
skip_name_resolve = 1
open_files_limit    = 65535
back_log = 1024
default_time_zone='+8:00'
# innodb_buffer_pool_size=32G
innodb_buffer_pool_instances=8
innodb_log_file_size=4G
innodb_log_files_in_group=4
# binlog过期时间3天
binlog_expire_logs_seconds=259200
wait_timeout = 9000
interactive_timeout = 9000
net_write_timeout=6000
net_read_timeout=6000
thread_cache_size=10
sync_binlog=800
innodb_autoextend_increment=64
open_files_limit=10200
#sort_buffer_size=256M

下载

$ cd /tmp/

$ wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-8.0/mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz
# $ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

解压并安装

$ tar  -zxvf  /tmp/mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz -C /usr/local
$ mv  /usr/local/mysql-8.0.23-linux-glibc2.12-x86_64  /usr/local/mysql
$ cd  /usr/local/mysql
$ ./bin/mysqld   --initialize-insecure  \
    --basedir=/usr/local/mysql \
    --datadir=/data/mysql/data \
    --user=mysql  \
    --pid-file=/data/mysql/mysql.pid

$ ./support-files/mysql.server start
$ ./support-files/mysql.server status

5.6与5.7在初始化的时候有一些区别,在 5.7.6 以前都用 mysql_install_db 来初始化数据库,在这之后的版本,由于 mysqld 程序已经集成了初始化数据库功能, mysql_install_db 这个功能在未来的版本中可能会被去掉。所以建议直接使用 mysqld --initialize-insecure 这样的方法来进行数据初始化。

添加到系统服务和开机自启

$ cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysql
$ chkconfig --add mysql
$ chkconfig mysql on

设置root密码,并开启任意IP登陆

/usr/local/mysql/bin/mysql -u root -p  
alter user root@'localhost' IDENTIFIED by 'Sj36668182' ;
-- UPDATE mysql.user SET authentication_string=PASSWORD("QH@123456") WHERE user='root' ;
grant all privileges on *.* to 'root' @'%' identified by '123456';
flush privileges;

设置 mysql 环境变量

将 mysql 安装路径的 bin 目录加到 Linux 的 PATH 环境,方便以后在任意目录下都可以都可以执行 mysql 的相关命令。

echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
# echo "PATH=$PATH:/usr/local/mysql/bin" >> ~/.bashrc 
source /etc/profile

mysql服务管理

$ systemctl status mysql
$ systemctl start mysql
$ systemctl stop mysql
$ systemctl restart mysql

2.2 包管理器安装

包管理器也是一种简单的安装方式,但是自由性没有那么好,自定义程度也没有那么好。

常用的 Linux 包管理器有 yum 和 apt 。分别适用于 rhel 系和 debian 系的 Linux 发行版。

2.2.1、yum 安装

添加 MySQL Yum 仓库到系统仓库列表中

$ wget -P /tmp https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
$ wget -P /tmp https://dev.mysql.com/get/mysql80-community-release-el6-1.noarch.rpm
$ rpm -Uvh platform-and-version-specific-package-name.rpm
  1. 选择版本

默认地,Yum 包安装的是最新的 GA 版本(标准发布版),如果这正是你需要的,可以跳过这一步。

在 MySQL Yum 仓库中,不同的发行版在不同的子仓库中,默认当前是当前最新的 GA 版本(8.0),5.7 系列默认是被禁用的,使用下面的命令来查看所有 MySQL 子仓库,看看哪些被启用,哪些被禁用

$ yum repolist all | grep mysql
$ dnf repolist all | grep mysql

如果要安装 5.7 系列的,需要禁用最新的 GA 版本子仓库,启用 5.7 系列版本子仓库。

$ sudo yum-config-manager --disable mysql80-community
$ sudo yum-config-manager --enable mysql57-community

这两行命令,其实就是修改 /etc/yum.repos.d/mysql-community.repo 这个文件里面的内容,通过 enabled 字段来控制启用和禁用。

[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/6/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

验证当前子仓库的可用性

 $ yum repolist enabled | grep mysql
  1. 安装 MySQL
$ sudo yum install mysql-community-server
  1. 启动 MySQL
$ sudo service mysqld start
$ sudo systemctl start mysqld.service
$ sudo service mysqld status
$ sudo service mysqld status

对于 5.7 ,root账号会随机生成一个密码存在日志文件中,通过 sudo grep 'temporary password' /var/log/mysqld.log 命令来查看。

密码要求如下:至少一个大写字母、至少一个小写字母、至少一个数字、至少一个特殊符号、字符总长度不小于8。

3、用户管理

用户标识

在 MySQL 中,用户是由 mysql.user 表中的 Host 和 User 两个字段一起来 唯一标识 一个用户的。

任何对用户的相关操作(赋权,修改密码等),都是通过 user@'host' 这样来标识一个用户。

MySQL 8.0 在用户管理方面增加了角色管理,默认的密码加密方式也做了调整,由之前的 SHA1 改为了 SHA2。

同时加上 MySQL 5.7 的禁用用户和用户过期的功能,MySQL 在用户管理方面的功能和安全性都较之前版本大大的增强了。

在 MySQL 8.0 中,caching_sha2_password 是默认的身份验证插件,而不是之前版本的 mysql_native_password,默认的密码加密方式是 SHA2 。

https://www.cnblogs.com/yinzhengjie/p/10301516.html

由于我们实际开发过程中的 navicate 等工具或各种语言的客户端,可能没有即使更新不支持 8.0 的这种认证方式,所以一般我们安装时都会设置为以前的认证方式。

mysql> show variables like 'default_authentication_plugin';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+
1 row in set (0.00 sec)

mysql> select user,host,plugin from mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | %         | caching_sha2_password |
| mysql.infoschema | localhost | mysql_native_password |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)

如果需要保持之前的验证方式和密码加密方式,需要在配置文件 my.cnf 中修改以下配置项并重启服务后生效。

[mysqld]
default_authentication_plugin = mysql_native_password

将 MySQL 8.0 中已有的用户的 SHA2 密码修改为 SHA1 的模式。


用户授权和修改密码

MySQL8创建用户的操作已经不支持grant的同时创建用户的方式,需先创建用户再进行授权,下面这种操作将会报错

GRANT ALL PRIVILEGES ON *.* TO `mike`@`%` IDENTIFIED BY '000000' WITH GRANT OPTION;

密码过期管理

MySQL可以给密码设置生命周期,让一个密码只在生命周期内有效,到期后强迫用户修改密码,如果不修改,则将用户锁定,无法登陆。

MySQL 从 5.6.6 开始引入密码自动过期的新功能,添加了 password_expired 功能,它允许设置用户的过期时间。

MySQL 5.7.4 版本中改进了用户密码过期时间这个特性。可以通过一个全局变量 default_password_lifetime 来设置一个全局的自动密码过期策略。

# mysql5.7.10(GA)版本之后默认的 default_password_lifetime 默认值为 0,表示禁用自动密码过期。默认全局配置:所有用户的密码永不过期
# 如果要建立全局策略,让所有用户的密码的使用期限为六个月,可在服务端配置文件 my.cnf 中修改 default_password_lifetime 配置项的值为 180。
# 如果是正整数 N ,则表示允许的设置密码生存周期 为 N,单位为天 。

密码策略

-- 查看密码策略  
show variables like 'validate_password%';
-- 新密码不能和前面三次的密码相同
password_history = 3 ; 
-- 新密码不能和前面九十天内使用的密码相同
password_reuse_interval = 90 ; 
-- 密码验证策略低要求(0或LOW代表低级)
validate_password.policy=0;
-- 密码至少要包含的小写字母个数和大写字母个数
validate_password.mixed_case_count=0;
-- 密码至少要包含的数字个数
validate_password.number_count=0; 
-- 密码至少要包含的特殊字符数
validate_password.special_char_count=0; 
-- 密码至少长度
validate_password.length=6; 

用户管理语句

-- 建用户
CREATE USER 'dba'@'%' IDENTIFIED WITH 'mysql_native_password' by 'admin@123' ;

-- 赋超级权限
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'%';

CREATE USER 'shendandan'@'192.168.%' IDENTIFIED WITH 'mysql_native_password' by 'admin@123' ;

-- 指定密码过期,以便用户第一次使用的时候需要修改密码
CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY 'new_password' PASSWORD EXPIRE DEFAULT;

-- 不使用加密连接
CREATE USER 'dba'@'%' IDENTIFIED WITH 'mysql_native_password' by 'admin@123'  REQUIRE NONE ;

-- 使用加密连接
CREATE USER 'dba'@'%' IDENTIFIED WITH 'mysql_native_password' by 'admin@123'  REQUIRE NONE ;


-- 创建用户并且设置资源闲置(如果不带资源选项,默认不限制资源)
-- 单位小时内账户被允许查询500次
-- 单位小时内账户被允许更新100次
-- 单位小时内最大连接数不限制
-- 同一时刻最大并发连接数不限制
CREATE USER 'jeffrey'@'%' 
IDENTIFIED WITH 'mysql_native_password' by 'admin@123'
WITH 
    MAX_QUERIES_PER_HOUR 500 
    MAX_UPDATES_PER_HOUR 100 
    MAX_CONNECTIONS_PER_HOUR 0 
    MAX_USER_CONNECTIONS 0;



-- 锁定用户
CREATE USER 'jeffrey'@'localhost' ACCOUNT LOCK
-- 解锁用户
ALTER USER 'jeffrey'@'localhost' ACCOUNT UNLOCK
-- 删除用户
DROP USER 'jeffrey'@'localhost';
-- 修改用户
RENAME USER 'jeffrey'@'localhost' TO 'jeff'@'127.0.0.1';
-- 修改当前用户自己账号的密码
ALTER USER USER() IDENTIFIED BY 'new_password';
-- 修改其他用户账号的密码
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'new_password';
-- 修改用户认证插件
ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password;
-- 修改密码和插件
ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';


-- 详细语法

CREATE USER [IF NOT EXISTS]
    user [auth_option] [, user [auth_option]] ...
    DEFAULT ROLE role [, role ] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH resource_option [resource_option] ...]
    [password_option | lock_option] ...

user:
    (see Section 6.2.4, Specifying Account Names)

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin AS 'hash_string'
}

tls_option: {
   SSL
 | X509
 | CIPHER 'cipher'
 | ISSUER 'issuer'
 | SUBJECT 'subject'
}

resource_option: {
    MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}

password_option: {
    PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
  | PASSWORD HISTORY {DEFAULT | N}
  | PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
  | PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
}

lock_option: {
    ACCOUNT LOCK
  | ACCOUNT UNLOCK
}

4、权限管理

grant 是MySQL中的权限管理语句,所有的权限都是从 root 赋权出来的。

赋予某个权限给某个用户时,最后跟上 with grant option,表示这个用户有这个权限有赋权权限,就是它可以把这个权限赋给其他用户。

revoke 是权限收回语句

-- 表权限
grant select , insert , delete,alter , update create, drop  on db.table to user@'host';


-- 存储过程/函数权限
grant EXECUTE  , create routine , alter routine  on db.proc to user@'host';

如果需要修改用户,必须要有对mysql这个schema的 CREATE USERUPDATE 权限。

MySQL 8.0.16版本开始,MySQL利用system_user权限来区分普通用户和系统用户。具体表现是:

1、拥有system_user权限的账号,是系统账号,可以修改系统账号自身和普通账号;

2、没有system_user权限的账号,是普通账号,只能修改普通账号自身。

MySQL5.7版本下,只要一个账号有create user权限,就可以对其他账号进行删除操作,甚至root账号它都可以删除,也就是说**普通账号可以删除root这种高权限的系统账号**。

MySQL8.0版本下,一个账号A有create user权限,无法对拥有system_user权限的root账号进行删除。

A账号还需要拥有system_user权限,才可以对root账号进行删除,因为root用户本身拥有system_user权限,也是一个系统账号,只有系统账号才能操作系统账号

  • 具有system_user权限的系统账号,可以对普通账号和其他系统账号进行管理,包含账号的创建、删除、修改,权限的授予和回收,密码修改,或者密码属性修改等(例如修改密码过期时间);

  • kill一个具有system_user权限的账号A持有的会话,你自身执行kill命令的账号B也必须有system_user权限;

在 MySQL5.7 中,存储过程和函数的元数据,是存在 mysql.proc 中 在 MySQL8.0 中,存储过程和函数的元数据,是存在 information_schema.routines

-- 在MySQL8.0.20之前,需要对普通用户进行如下授权后才能看到其他用户定义的函数/存储过程:
GRANT CREATE ROUTINE,ALTER ROUTINE,EXECUTE,TRIGGER,SYSTEM_USER,EVENT,SELECT ON schema_name.* TO 'YOUR_USERNAME';

-- 在MySQL8.0.20后,可以这样赋权
GRANT CREATE ROUTINE,ALTER ROUTINE,EXECUTE,TRIGGER,SYSTEM_USER,EVENT,SHOW_ROUTINE  ON schema_name.* TO 'YOUR_USERNAME';


-- MySQL8.0.20中专门增加了show_routine 权限用于表示查看所有的 procedures/func 的权限(即使不是definer),不过需要注意,show_routine 是全局权限。

关于这点在MySQL官方文档中有说明:

赋权后,用户可以执行 SHOW CREATE FUNCTION ,  SHOW CREATE PROCEDURE  等语句来查看其定义。

5、MySQL自带的数据库

MySQL 官方提供了多个示例数据库,在MySQL的学习、开发和实践中具有非常重要的作用,能够帮助初学者更好地理解和应用MySQL的各种功能和特性。

官方提供的示例数据具体列表如下:

  1. employee data (large dataset, includes data and test/verification suite)
  2. world database
  3. world_x database
  4. sakila database
  5. airportdb database (large dataset, intended for MySQL on OCI and HeatWave)
  6. menagerie database

这些数据库都可以通过官方网址进行下载和安装

sakila数据库

Sakila数据库提供了丰富的数据集来演示如何使用MySQL进行高效的数据库查询和数据管理。通过使用Sakila数据库,初学者可以学习如何使用SELECT、JOIN、GROUP BY等关键字进行复杂的查询,使用INSERT、UPDATE、DELETE等关键字进行数据管理,以及使用约束、索引、存储过程等高级功能进行数据库设计和优化。

Sakila数据库还提供了一个典型的电影租赁业务场景,可以让学习者更好地理解数据库如何应用在真实的业务场景中。在官方网站上,有关该数据库的文档和示例都可以免费下载和使用。

可以在MySQL官方网站的示例数据库中(Sample Databases)找到Sakila示例数据库。Sakila示例数据库是由Oracle提供的,旨在替代原有的world示例数据库。相比于world示例数据库,Sakila示例数据库更加复杂,用于模拟一个DVD租赁店,并且包含了更多表格以及更复杂的表格关系。Sakila示例数据库被设计用来提供一个更加实用和有趣的示例,供MySQL学习者训练他们的SQL技能。如果您想要练习SQL技能,可以下载Sakila示例数据库进行尝试。

Sakila数据库包括16个表、7个视图、3个 Stored Procedures、3个 Stored Functions、6个触发器。

  1. actor - 这张表存储了所有演员的信息,包括演员的ID、姓名和最后更新时间。

  2. actor_info - 这个视图结合了 actor、film_actor 和 film 表,提供了更详细的演员信息,包括演员所出演的电影名称和描述。

  3. address - 这张表存储了客户的地址信息,包括地址ID、地址、区域、城市、邮编、国家和最后更新日期。

  4. category - 这张表存储了所有电影的分类信息,包括分类ID 和分类名称。

  5. city - 这张表存储了城市的信息,包括城市ID、城市名称、区域以及最后更新时间。

  6. country - 这张表存储了国家的信息,包括国家ID、国家名称以及最后更新时间。

  7. customer - 这张表存储了客户信息,包括客户ID、姓名、电子邮件、地址、区域、城市、邮编以及最后更新时间。

  8. customer_list - 这个视图结合了 customer、address 和 city 表,提供了更详细的客户信息,包括客户ID、姓名、电子邮件、地址、区域、城市、邮编、国家和最后更新日期。

  9. film - 这张表存储了所有电影的信息,包括电影ID、电影名称、描述、发布年份、语言ID、原始语言ID、时长、租赁持续时间、租赁费用以及最后更新时间。

  10. film_actor - 这张表存储了电影演员的关联信息,包括电影ID、演员ID以及最后更新时间。

  11. film_category - 这张表存储了电影类型的关联信息,包括电影ID、分类ID以及最后更新时间。

  12. film_list - 这个视图结合了 film 和 category 表,提供了更详细的电影信息,包括电影ID、电影名称、描述、发布年份、语言、分类、时长、租赁持续时间以及租赁费用。

  13. film_text - 这张表存储了电影的描述信息,包括电影ID、标题、描述以及最后更新时间。

  14. inventory - 这张表存储了所有电影的库存信息,包括库存ID、电影ID、租赁商店ID以及最后更新时间。

  15. language - 这张表存储了语言的信息,包括语言ID、语言名称以及最后更新时间。

  16. nicer_but_slower_film_list - 这个视图结合了 film_list、film_actor、actor 和 category 表,提供更详细的电影信息,包括电影ID、电影名称、描述、发布年份、语言、租赁持续时间、租赁费用、演员列表、分类列表以及平均评分。

  17. payment - 这张表存储了所有顾客的付款信息,包括付款ID、顾客ID、租赁ID、付款金额、付款时间以及最后更新时间。

  18. rental - 这张表存储了所有出租信息,包括租赁ID、客户ID、库存ID、租赁时间、返还时间、出租费用以及最后更新时间。

  19. sales_by_film_category - 这个视图统计了每种电影类型的销售额,包括分类名称、销售额以及最后更新时间。

  20. sales_by_store - 这个视图统计了每个店铺的销售额,包括店铺ID、城市、国家、销售额以及最后更新时间。

  21. staff - 这张表存储了员工的信息,包括员工ID、姓名、电子邮件、店铺ID、用户名、密码以及最后更新时间。

  22. staff_list - 这个视图结合了 staff 和 address 表,提供了更详细的员工信息,包括员工ID、姓名、电子邮件、地址、区域、城市、邮编、国家以及最后更新时间。

  23. store - 这张表存储了店铺的信息,包括店铺ID、地址ID、经理ID以及最后更新时间。

6、Mariadb安装

MariaDB和MySQL区别,其实不是很大,尤其是MySQL5.xMariaDB,目前MariaDB和MySQL主要区别:

  • 许可协议:MariaDB使用的是GPL协议,而MySQL使用的是GPL和Commercial License(商用协议)。MariaDB比MySQL更加开源。

  • SQL引擎:MariaDB相比MySQL,除了提供标准的MyISAM、BLACKHOLE、CSV、MEMORY、ARCHIVE和MERGE引擎外,在MariaDB源码与二进制包中还提供下列存储引擎:Aria、XtraDB (与InnoDB对等替换)、FederatedX (与Federated对等替换)、Cassandra等SQL存储引擎。

  • 速度快:据MariaDB称,同等配置条件下,MariaDB检录会比MySQL快。

网上Linux编译安装MariaDB的方法其实很多,但是大多冗余严重,版本太过老旧。编译安装MariaDB本来就是比较困难的,如果你觉得太难,可以使用Docker、软件包管理器来安装MariaDB。

依赖

  • git
  • gunzip
  • GNU tar
  • gcc/g++ 4.8.5 or later, recommend above 9 or clang/clang++
  • GNU make 3.75 or later or Ninja
  • bison (3.0)
  • libncurses
  • zlib-dev
  • libevent-dev
  • cmake above 2.8.7 though preferably above 3.3
  • gnutls or openssl
  • jemalloc (optional)
  • snappy (compression library, optional)
  • valgrind (only needed if running mysql-test-run --valgrind)
  • libcurl (only needed if you want to use the S3 storage engine)

有些包管理器支持构建依赖命令。使用这种方式,包管理器会自动尝试下载安装需要的这些依赖。这会让编译更加简单,不同的发行版包管理器各有不同。

# for  Ubuntu or Debian
apt build-dep mariadb-server

# for Fedora or Rhel
dnf builddep mariadb-server

# for Centos
yum install yum-utils
yum-builddep mariadb-server

# for openSUSE or SUSE 
zypper source-install -d mariadb
cd /usr/local/src/ 

# 在国内镜像下载最新版的mariadb源代码
wget https://mirrors.neusoft.edu.cn/mariadb//mariadb-11.0.1/source/mariadb-11.0.1.tar.gz

tar -zxvf mariadb-11.0.1.tar.gz  && cd  ariadb-11.0.1


cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mydata/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci