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 系统下载的安装文件:
- 免安装方式(推荐)
- 5.7:mysql-5.7.28-winx64.zip
-
msi安装方式
-
下载MSI Installer文件,下一步下一步式安装。
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
- 选择版本
默认地,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
- 安装 MySQL
$ sudo yum install mysql-community-server
- 启动 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 。
由于我们实际开发过程中的 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 USER
和 UPDATE
权限。
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的各种功能和特性。
官方提供的示例数据具体列表如下:
- employee data (large dataset, includes data and test/verification suite)
- world database
- world_x database
- sakila database
- airportdb database (large dataset, intended for MySQL on OCI and HeatWave)
- 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个触发器。
-
actor - 这张表存储了所有演员的信息,包括演员的ID、姓名和最后更新时间。
-
actor_info - 这个视图结合了 actor、film_actor 和 film 表,提供了更详细的演员信息,包括演员所出演的电影名称和描述。
-
address - 这张表存储了客户的地址信息,包括地址ID、地址、区域、城市、邮编、国家和最后更新日期。
-
category - 这张表存储了所有电影的分类信息,包括分类ID 和分类名称。
-
city - 这张表存储了城市的信息,包括城市ID、城市名称、区域以及最后更新时间。
-
country - 这张表存储了国家的信息,包括国家ID、国家名称以及最后更新时间。
-
customer - 这张表存储了客户信息,包括客户ID、姓名、电子邮件、地址、区域、城市、邮编以及最后更新时间。
-
customer_list - 这个视图结合了 customer、address 和 city 表,提供了更详细的客户信息,包括客户ID、姓名、电子邮件、地址、区域、城市、邮编、国家和最后更新日期。
-
film - 这张表存储了所有电影的信息,包括电影ID、电影名称、描述、发布年份、语言ID、原始语言ID、时长、租赁持续时间、租赁费用以及最后更新时间。
-
film_actor - 这张表存储了电影演员的关联信息,包括电影ID、演员ID以及最后更新时间。
-
film_category - 这张表存储了电影类型的关联信息,包括电影ID、分类ID以及最后更新时间。
-
film_list - 这个视图结合了 film 和 category 表,提供了更详细的电影信息,包括电影ID、电影名称、描述、发布年份、语言、分类、时长、租赁持续时间以及租赁费用。
-
film_text - 这张表存储了电影的描述信息,包括电影ID、标题、描述以及最后更新时间。
-
inventory - 这张表存储了所有电影的库存信息,包括库存ID、电影ID、租赁商店ID以及最后更新时间。
-
language - 这张表存储了语言的信息,包括语言ID、语言名称以及最后更新时间。
-
nicer_but_slower_film_list - 这个视图结合了 film_list、film_actor、actor 和 category 表,提供更详细的电影信息,包括电影ID、电影名称、描述、发布年份、语言、租赁持续时间、租赁费用、演员列表、分类列表以及平均评分。
-
payment - 这张表存储了所有顾客的付款信息,包括付款ID、顾客ID、租赁ID、付款金额、付款时间以及最后更新时间。
-
rental - 这张表存储了所有出租信息,包括租赁ID、客户ID、库存ID、租赁时间、返还时间、出租费用以及最后更新时间。
-
sales_by_film_category - 这个视图统计了每种电影类型的销售额,包括分类名称、销售额以及最后更新时间。
-
sales_by_store - 这个视图统计了每个店铺的销售额,包括店铺ID、城市、国家、销售额以及最后更新时间。
-
staff - 这张表存储了员工的信息,包括员工ID、姓名、电子邮件、店铺ID、用户名、密码以及最后更新时间。
-
staff_list - 这个视图结合了 staff 和 address 表,提供了更详细的员工信息,包括员工ID、姓名、电子邮件、地址、区域、城市、邮编、国家以及最后更新时间。
-
store - 这张表存储了店铺的信息,包括店铺ID、地址ID、经理ID以及最后更新时间。
6、Mariadb安装¶
MariaDB和MySQL区别,其实不是很大,尤其是MySQL5.x
和MariaDB
,目前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