1. MySQL数据库版本
版本 | 说明 |
---|---|
社区版: MySQL Community Edition (GPL) | 1.可以看做是企业版的“广泛体验版(小白鼠版)",未经各个专有系统平台的压力和性能测试 2.基于GPL协议发布,可以随意下载使用 3.没有任何官方技术支持服务 |
企业版: MySQL Enterprise Edition(commercial) | 1.提供了比较全面的高级功能、管理工具及技术支持 2.安全性、稳定性、可扩展性比较好 |
集群版: MySQL Cluster CGE(commercial) | 社区版可集群;企业版可集群 |
2. 版本命名方式
版本 | 说明 |
---|---|
a (Alpha) 版 | 内测版,内部交流或者专业测试人员测试用。Bug较多,普通用户最好不要安装。 |
β(Beta) 版 | 公测版,专业爱好者大规模测试用,存在一些缺陷,该版本也不适合一般用户安装。 |
y(Gamma )版 | 相当成熟的测试版,与即将发行的正式版相差无几。 |
Final | 正式版本 |
Free | 自由版本 |
Release | 发行版本 |
Standard | 标准版本 |
Mini | 迷你精简版本,只有最基本的功能 |
Upgrade | 升级版本 |
GA(GenerallyAvailable) | 开发团队认为该版本是稳定版,可以在较为关键的场合使用。 |
Retail | 零售版 |
3. MySQL安装
3.1 三种安装方式
RPM版本
命名:MySQL-server-5.6.31-1.el7.x86_64.rpm[,需要在特定linux版本下安装。
基于glibc版本
命名:mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz
依赖 glibc库,可以安装在通用的Linux系统下
源代码编译安装
命名:mysql-5.6.35.tar.gz,通用的Linux下都可以编译安装。
三种安装方式比较
安装方式 | 优点 | 缺点 |
---|---|---|
rpm安装 | 卸载简单 | 可定制性差 |
基于glibc安装 | 可定制性相比rpm包灵活些 | 安装相比rpm包复杂些,需要手动初始化数据库 |
源代码编译安装 | 可定制性最强,根据需求和功能定制 | 安装麻烦,需要手动初始化数据库 |
3.2 基于glibc安装MySQL
安装文档
版本下载: mysql-5.7.42-linux-glibc2.12-x86_64
安装步骤
本文mysql基目录(家目录):/usr/local/mysql
本文mysql数据目录:/usr/local/mysql/data
# 1.创建用户组和用户
groupadd mysql
#useradd mysql -r -s /sbin/nologin
useradd -r -g mysql -s /bin/false mysql
# 2.安装 mysql-5.7.42-linux-glibc2.12-x86_64
mkdir /usr/local/mysql
cd /usr/local/mysql
tar zxvf mysql-5.7.42-linux-glibc2.12-x86_64.tar
cp -a mysql-5.7.42-linux-glibc2.12-x86_64/* ..
# 3.更改mysql安装目录的所属组和所属用户
chown -R mysql:mysql /usr/local/mysql
# 4. Mysql启动,需要读取my.cnf,也需要读取数据目录的表文件,所以首次启动要初始化数据库
## 检查mysql家目录是否存在my.cnf
## 检查mysql数据目录是否存在my.cnf
## 检查/etc/my.cnf是否存在,若存在且是默认mariadb的my.cnf,就删除掉该文件 cat /etc/my.cnf
## 初始化数据库
bin/mysqld --initialize --user=mysql
## 初始化之后,日志中给出默认密码,需要记录一下
# 5. 拷贝启动脚本,启动数据库
cp support-files/mysql.server /etc/init.d/mysql.server
service mysql.server start
# 6. mysql执行脚本加入环境变量
vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile
# 7. 安全初始化数据库
##密码验证插件安装、禁止匿名登录? 禁止管理员账号远程登录? 删除测试库? 刷新权限表?
bin/mysql_secure_installation
检查mysql启动状态
[root@node3 mysql]# ss -naltp|grep mysqld
3.3 基于源代码安装MySQL
- 安装需求
- 安装cmake 和 ncurses:
yum -y install ncurses-devel cmake
- MySQL源码下载 ,放入合适位置 /usr/local/mysql_source
- 编写/usr/local/mysql_source/mysql-5.7.43/cmake.sh
cmake .\
-DCMAKE_INSTALL_PREFIX=/mysq131\
-DMYSQL_DATADIR=/mysq131/data\
-DMYSQL_TCP_PORT=3307\
-DMYSQL_UNIX_ADDR=/mysq131/mysq131.sock\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_PARTITION_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITH_MYISAM_STORAGE_ENGINE=1\
-DENABLED_LOCAL_INFILE=1\
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8mb4\
-DDEFAULT_COLLATION=utf8mb4_general_ci
执行cmake.sh: ./cmake.sh
- MySQL编译和安装:
make && make install
不需要手动创建mysql基目录和数据目录,cmake.sh中已指定 - 进入mysql 家目录/usr/local/mysql_source/mysql-5.7.43,进行后续配置
# 1.更改mysql安装目录的所属组和所属用户
cd /usr/local/mysql_source
cp -a mysql-5.7.43/* ..
chown -R mysql:mysql /usr/local/mysql_source
# 2. Mysql启动,需要读取my.cnf
## 检查mysql基目录/usr/local/mysql_source是否存在my.cnf,存在就读取该my.cnf,然后执行初始化数据库命令
## 若单机安装多个mysql服务,建议每个基目录下放置my.cnf
## 检查mysql数据目录/usr/local/mysql_source/data是否存在my.cnf
## 检查/etc/my.cnf是否存在,若存在且是默认mariadb的my.cnf,就删除掉该文件 cat /etc/my.cnf
## 初始化数据库
bin/mysqld --initialize --user=mysql
## 初始化之后,日志中给出默认密码,需要记录一下
# 3. 拷贝启动脚本,启动数据库
cp support-files/mysql.server /etc/init.d/mysql.server
service mysql.server start
# 4. 安全初始化数据库
##密码验证插件安装、禁止匿名登录? 禁止管理员账号远程登录? 删除测试库? 刷新权限表?
bin/mysql_secure_installation
- 常用配置选项
配置选项 | 描述 | 默认值 | 建议值 |
---|---|---|---|
CMAKE_INSTALL_PREFIX | 安装基目录(basedir) | /usr/local/mysql | 根据需求 |
MYSQL_DATADIR | 数据目录(datadir) | 根据需求 | |
SYSCONFDIR | 默认配置文件my.cnf路径 | /etc | |
MYSQL_TCP_PORT | TCP/IP端口 | 3306 | 非默认端口 |
MYSQL_UNIX_ADDR | 套接字socket文件路径 | /tmp/mysql.sock | $basedir/ |
DEFAULT_CHARSET | 默认字符集 | latin1 | utf8mb4 |
DEFAULT_COLLATION | 默认校验规则 | latin1_swedish_ci | utf8mb4_general_ci |
WITH_EXTRA_CHARSETS | 扩展字符集 | all | all |
ENABLED_LOCAL_INFILE | 是否启用本地加载外部数据文件功能 | OFF | 建议开启 |
存储引擎相关配置项
以下选项值均为布尔值,0或1,0代表不编译到服务器中,1代表编译,建议都静态编译到服务器中。其他的存储引擎可以根据实际需求在安装时通过WITH_XxxX_STORAGE_ENGINE=1的方式编译到服务器中。
参数名 | 参数说明 |
---|---|
WITH_INNOBASE_STORAGE_ENGINE | 将InnoDB存储引擎插件构建为静态模块编译到服务器中建议编译到服务器中。 |
WITH_PARTITION_STORAGE_ENGINE | 是否支持分区 |
WITH_FEDERATED_STORAGE_ENGINE | 本地数据库是否可以访问远程mysq1数据 |
WITH_BLACKHOLE_STORAGE_ENGINE | 黑洞存储引擎,接收数据,但不存储,直接丢弃 |
WITH_MYISAM_STORAGE_ENGINE | 将MYISAM存储引擎静态编译到服务器中 |
3.4 更改管理员root用户密码
① 已知旧密码修改新密码
修改新密码为123456
[root@node3 bin]# mysqladmin -uroot password ‘123456’ -p
② 已知旧密码,使用SQL语句修改密码
mysql> select host,user,authentication_string,password_expired,password_last_changed,password_lifetime,account_locked from mysql.user;
mysql> alter user 'root'@'localhost' identified by '1qaz@WSX';
mysql> flush privileges;
③Shell终端安全初始化脚本
cd mysql家目录/bin
[root@node3 bin]# mysql_secure_installation
④忘记密码后重置密码
停止数据库
跳过授权表启动数据库
免密登录数据库,SQL语句修改数据库
刷新权限
启动数据库 : service mysql start
[root@node3 ~]# service mysql stop
Redirecting to /bin/systemctl stop mysql.service
[root@node3 ~]# mysqld_safe --skip-grant-tables --user=mysql&
[2] 22824
[root@node3 ~]# 2023-10-02T03:12:44.975972Z mysqld_safe Logging to '/usr/local/mysql/data/node3.itcast.cn.err'.
2023-10-02T03:12:45.082633Z mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
mysql> alter user 'root'@'localhost' identified by '1qaz@WSX';
mysql> flush privileges;
3.5 MySQL5.6.X 与 5.7.X修改密码的区别
MySQL5.6.X版本
mysql> update mysql.user set authentication_string = password('123456') where user='root' and host = 'localhost';
mysql> set password for 'root'@'localhost'=password('123456');
MySQL 5.7.X版本user表中已经没有password字段
mysql> set password for root@localhost = password('1qaz@WSX');
mysql> set password for 'root'@'localhost'='1qaz@WSX';
-- 推荐
mysql> alter user 'root'@'localhost' identified by '1qaz@WSX';
4. 客户端工具
4.1 mysql
用法:
bin/mysql [options][db_name]
options参数:
-u, --user=name:指定登录用户名
-p, --password:指定登录密码(注意是小写p),一定要放到最后面
-h, --host=name:指定数据库的主机地址
-P, --port=xxx:指定数据库的端口号(大写P)
-S, --socket=name:指定socket文件
-e, --execute=name:使用非交互式操作(在shell终端执行sql语句)
mysql客户端登录mysql服务
① 本地登录
mysql -uroot -p
mysql -uroot -p123456
② 指定本地或远端主机登录
mysql -uroot -hlocalhost -P3306 -p
mysql -uroot -hlocalhost -P3306 -p123456
③ shell终端使用SQL语句
mysql -uroot -e "show databases;" -p123456
mysql -uroot -hlocalhost -P3306 -e "show databases;" -p123456
④ 使用socket文件登录
mysql -uroot -S /tmp/mysql.sock -uroot -p123456
⑤ 单机>=1个mysql server实例,指定别名登录
alias startMysq1='mysql -S /tmp/mysq1.sock'
startMysq1 -uroot -p123456
不设置参数,默认root@localhost本地登录
startMysq1 -p
4.2 mysqladmin
mysqladmin [options]command [command-options]
options常用参数:
-h,–host=name 连接主机
-p,–password 密码
-P,–port=连接端口
-S,–socket=name指定socket文件
-u, --user=name指定用户名
常用命令:
password [new-password]更改密码
reload 刷新授权表
shutdown 停止mysql服务
status 简短查看数据库状态信息
start-slave 启动slave
stop-slave 停止slave
variables 打印可用变量
version 查看当前mysql数据库的版本信息
mysqladmin shutdown -uroot -p
mysqladmin shutdown -uroot -p123456
mysqladmin password '123456' -uroot -p123456
mysqladmin shutdown -uroot -p123456 -S /tmp/mysq1.sock
mysqladmin status -uroot -p123456 -S /tmp/mysq1.sock
alias startMysqladmin='mysqladmin -S /tmp/mysq1.sock'
startMysqladmin shutdown -uroot -p123456
5.MySQL启动过程
- 命令行启动数据库:
① service mysql start -> mysqld_safe -> mysqld daemon
② mysqld_safe [options] & -> mysqld daemon
ex: mysqld_safe --user mysql
脚本调用顺序:
mysql 调用mysqld_safe,mysqld_safe调用mysqld ,所以①②两种方式启动,会有两个进程工作
- 以上方式启动数据库读取相应配置文件顺序:
$basedir(mysql安装目录)
—> $datadir (mysql的数据目录)
—> /etc/my.cnf
–> /etc/mysql/my.cnf
–> -/.my.cnf
//表示启动时给mysq1d程序传递相应参数
[mysq1d]
basedir= /usr/local/mysql
datadir= /usr/local/mysql/data
port=3307
socket=/usr/local/mysql/mysql.sock
server_id=1
1og-error=/usr/local/mysql/err
pid-file=/usr/local/mysql/pid
//表示使用mysq1客户端工具连接mysq1数据库时传递相应参数
// 配置client标签,shell终端直接输入mysql,就可以启动
[client]
socket=/usr/local/mysql/mysql.sock
port=3307
password="123456"
// mysqld_safe启动数据库时传递的参数
[mysqld_safe