一.检查包。装包
1.rpm -qa | grep -i mariadb (查看软件)
2.systemctl stop mariadb(关闭服务)
3.rpm -e --nodeps mariadb-server(卸载软件)
4.rm -rf /var./lib/mysql/*(卸载默认路径文件) rm -rf /etc/my.cnf(删除主配置文件)
5.装包 yum -y install perl-JSON
rpm -Uvh mysql-community-release-el7-5.noarch.rpm
yum -y install mysql-server
6.rpm -Uvh mysql-community-*.rpm(装包)
启服务:systemctl start mysqld (起服务)
systemctl status mysqld(查看服务状态)
systemctl enable mysqld(开机自起)
7.rpm -qa | grep -i mysql(查看软件)
8.ps -c mysqld: 查询进程服务
9.数据库初始密码
grep password /var/log/mysqld.log(初始密码第一行的最后)
root@host60 ~]# mysql -uroot -p'初始密码'
10.修改root密码口令
root@host50 ~]# mysql>set global validate_password_policy=0;(只验证密码长度)
root@host50 ~]# mysql>set global validate_password_length=6;(修改密码长度。默认是8位数)
root@host50~]mysql> alter user user() identified by "123456";(修改登陆密码)
root@host50~]mysql>quit
[root@host50 ~]# mysql -uroot -p123456(使用新密码登陆)
二。把数据存储到数据库服务器上的过程?
1.连接数据库服务器
2.创建库 (类似于系统文件夹)
格式:create database 库名;
show databases; (查看已有库)
use 库名; (切换库)
select database ()(显示当前所在库)
show tables (显示以有表)
drop database 库名;(删除库名)
3创建表 (类似于系统文件)
表必须在库里
(创建表,查看内容,查看表结构,删除表,写入数据)
创建表格式:create table 库名.表名(
字段名1 字段类型(宽度) 约束条件,
字段名2 字段类型(宽度) 约束条件,
字段名N 字段类型(宽度) 约束条件,);
例子:create database xixi;
create table xixi.haha(
(名字)name char(15), char (字符类型255字符) 数值类型:int ,4字节,大整数
(性别)sex char(10), varchar(变长字符数,大文本类型65535)
(年龄)age int(2), int(大型数值类型)
(电话)tel char(11));
show tables; (查看当前库里的所有表) 英文版
insert into haha values("xixi","tom"); (插入数据)
select * from haha; (查看指定表信息)
create table 学生信息表2(
姓名 char(15),
班级 char(7)
) DEFAULT CHARSET=utf8; 字符集 中文版 加default charset=utf8;才能打中文)
insert into 学生信息表2 values("崔志伟","nsd1802"); (插入数据)
update 学生信息表2 set 姓名="张三"; (修改字段)
select * from 学生信息表2 ; (查看指定表信息)
4.插入数据 (类似于文件里 的行)
格式:
desc 表名;(查看表结构);
select * from 表名;(查看表记录)
drop table 表名; (删除表)
insert into 表名 values(值列表); (插入表记录)
update 表名 set 字段=值; (修改表记录)
delete from 表名; (删除表记录)
案例:
5,断开连接
三。数值类型
案例:create database db1;(创建库)
use db1;
create table t1(level tinyint); level 字段1 tinyint 类型整数
desc t1;
insert into t1 values(99) ; 注意值不能大于小于范围
案例:整数型
create database db2;
use db2;
create table t2(level tinyint unsigned); tinyint(微小整数)
desc t2;
select * from t2;
insert into t2 values(99);
浮点型:
create database db4;
create table t3(pay float(5,2)); 创建表 float(小数型)
inser tinto t3 values(118);
四。时间类型
年 year yyyy 2018 (默认用4位数)只有2位数时,1-69视为2000-2069,70-99视为1970-1999
日期 date yyyyMMDD 20180711
时间 time HHMMSS 083000
日期时间 datetime (8个字节) YYYYMMDDHHSS
timestamp (4个字节) 20180711093758
建表格式:
create database db2;
use db2;
create table t1(name char(15),
birthday date, birthday(生日) date(日期)
work time, work(工作。上班) time(时间)
s_year year, s_year (出生) year(年份)
meetting datetime); meetting(约会) datetime(日期时间)
desc t1; (查看指定表结构)
insert into t1 values("leiguoyong",20181120,220000,1991,20181224203000);(插入数据)
select * from t1;(查看表内容)
timestamp 和datetime的区别:
create table t2(meetting datetime,(为NULL)
party timestamp);(当前系统时间)
insert into t2 values (20170711102356,20191224190000);
insert into t2(party) values (20160711102356);
insert into t2(meetting) values (20191011102356);
select * from t2;
reg_tab
name
passwd
reg_time
时间命令:
now()获取系统当前日期和时间 select now();
year():执行时动态获得系统日期时间 select year( now() );获取系统日期时间 select year( 20191224 );获取指定时间日期
sleep(N)休眠N秒
curdate()获取当前的系统时间
curtime()获取当前的系统时刻
month()获取指定时间中的月份 select month(20191224 );获取指定时间月份
date()获取指定时间中的日期 select date(now() );获取系统日期
select day(20191224 );获取指定时间几号
select day(now());获取系统时间几号
time()获取指定时间中的时刻 select time(now() );获取系统时间
insert into t2 values("bob",date(now()),090000,year(19951223),now()); (匹配对应的列数才行)
枚举型:
enum(值1,值2,值3)从给定值集合中选择单个值
set(值1,值2,值3)从给定值中选择多个值)
五。mysql相关服务参数
1./etc/my.cnf(主配置文件)
2./var/lib/mysql(数据库目录)
3.默认端口号(3306)
4.进程名(mysqld)
5.传输协议(TCP)
6.进程所有者(mysql)
7。进程所属组(mysql)
常见的数据库服务软件
类 型
Oracle Database
MySQL/MariaDB
厂 商
Oracle (甲骨文)
Microsoft (微软)
DB2 IBM
Sybase Sybase
PostgreSQL 加州大学伯克利分校MySQL 数据库介绍MySQL 的起源与发展过程
• 最为著名、应用最广泛的开源数据库软件
知
识
讲
解
– 最早隶属于瑞典的 MySQL AB 公司
– 2008 年 1 月, MySQL AB 被 Sun 收购
– 2009 年 4 月, SUN 被 Oracle 收购
• 崭新的开源分支 MariaDB
– 为应付 MySQL 可能会闭源的风险而诞生
– 由 MySQL 原作者 Widenius 主导开发
– 与 MySQL 保持最大程度兼容MySQL 的特点及应用
• 主要特点
知
识
讲
解
– 适用于中小规模、关系型数据库系统
– 支持 Linux/Unix 、 Windows 等多种操作系统
– 使用 C 和 C++ 编写,可移植性强
– 通过 API 支持 Python/Java/Perl/PHP 等语言
• 典型应用环境
– LAMP 平台,与 Apache HTTP Server 组合
– LNMP 平台,与 Nginx 组合构建 MySQL 服务
器
MySQL 安装
MySQL 安装前准备环境
RPM 方式安装 MySQL 数据库
启动 MySQL 数据库服务器
构建 MySQL 服务
器
MySQL 初始配置
修改 root 口令
mysql 服务相关参数MySQL 安装安装 MySQL
• 基本需求
知
识
讲
解
– 1. 采用 RHEL7.2 系统搭建 MySQL 服务器
– 2. 关闭 iptables
– 3. 关闭 selinux
– 4. 软件 mysql-5.7.17-1安装 MySQL (续 1 )
• 从官网下载 RPM 包
知
识
讲
解
– http://dev.mysql.com/downloads/mysql/
– 选择适用于当前系统的 bundle 集合包
mysql-community-client
// 客户端应用程序
mysql-community-common // 数据库和客户端库共享文件
mysql-community-devel
// 客户端应用程序的库和头文件
mysql-community-embedded // 嵌入式函数库
mysql-community-embedded-compat // 嵌入式兼容函数库
mysql-community-embedded-devel // 头文件和库文件作为 Mysql 的嵌入
式库文件
mysql-community-libs //MySQL 数据库客户端应用程序的共享库
mysql-community-libs-compat // 客户端应用程序的共享兼容库安装 MySQL (续 2 )
• 准备工作
知
识
讲
解
– 停止 mariadb 服务
– 删除文件 /etc/my.cnf
– 删除数据
– 卸载软件包
[root@localhost ~]# systemctl stop mariadb
[root@localhost ~]# rm -rf /etc/my.cnf
[root@localhost ~]# rm -rf /var/lib/mysql/*
[root@localhost ~]# rpm -e --nodeps mariadb-server mariadb
警告: /var/log/mariadb/mariadb.log 已另存为 /var/log/mariadb/
mariadb.log.rpmsave
[root@localhost ~]#安装 MySQL (续 3 )
• 至少安装 server 、 client 、 share* 包
知
识
讲
解
– 采用 U 升级安装,可替换冲突文件
– 推荐将 devel 也装上,用于支持其他软件
[root@localhost ~]# yum -y install perl-Data-Dumper perl-JSON
perl-Time-HiRes
[root@localhost ~ ]# tar -xf mysql-5.7.17-1.el7.x86_64.rpm-
bundle.tar
[root@localhost ~ ]# rpm -Uvh mysql-community-*.rpm启动 MySQL 数据库服务
• 服务脚本为 /usr/lib/systemd/system/mysqld.ser
vice
知
识
讲
解
[root@localhost ~]# systemctl enable mysqld
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service;
enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-04-18 15:29:56 CST;
1min 12s ago
.......
Main PID: 15112 (mysqld)
CGroup: /system.slice/mysqld.service
└─15112 /usr/sbin/mysqld --daemonize
--pid-file=/var/run/mysqld/mysqld.pidMySQL 初始配置修改 root 口令
• 默认的数据库管理账号
知
识
讲
解
– root ,允许从 localhost 访问
– 首次登录密码在安装时随机生成
– 存储在错误日志文件里
[root@localhost ~]# grep 'temporary password'
/var/log/mysqld.log
2017-04-18T07:29:27.634784Z 1 [Note] A temporary password is
generated for root@localhost: mtoa>Av<p6Yk
[root@localhost ~]#
随机生成的管理密码
[root@localhost ~]# mysql -uroot -p'mtoa>Av<p6Yk’
mysql>修改 root 口令(续 1 )
validate_password_policy 验证密码策略
知
识
讲
解
0 or LOW 长度
1 or MEDIUM( 默认 ) 长度;数字,小写 / 大写,和特殊字符
2 or STRONG 长度;数字,小写 / 大写和特殊字符;字
典文件
mysql> set global validate_password_policy=0; // 只验证长度
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=6; // 修改密码长度
默认值是 8 个字
符修改 root 口令(续 2 )
• 操作方法
知
识
讲
解
– 通过客户端工具 mysql 连接本服务器
– 使用 alter user 重设口令
mysql> alter user user() identified by "123456"; // 修改登陆密码
Query OK, 0 rows affected (0.00 sec)
mysql>quit
[root@localhost ~]# mysql -uroot -p123456
// 使用新密码登陆mysql 服务相关参数
文件
知
识
讲
解
说明
/etc/my.cnf 主配置文件
/var/lib/mysql 数据库目录
默认端口号 3306
进程名 mysqld
传输协议 TCP
进程所有者 mysql
进程所属组 mysql案例 1 :构建 MySQL 服务器
1. 安装 MySQL-server 、 MySQl-client
2. 修改数据库用户 root 的密码
课
堂
练
习
3. 确认 MySQL 服务程序运行、 root 可控数据库基本管理
MySQL 连接工具
数据存储流程
连接 MySQL 服务器
数据库基本管理
使用 mysql> 管理环境
MySQL 基本操作
库管理命令
表管理命令
记录管理命令MySQL 连接工具数据存储流程
• 客户端把数据存储到服务器上的步骤
知
识
讲
解
– 连接数据库服务器
// 类似于系统文件夹
– 建库
– 建表
– 插入记录
– 断开连接
// 类似于系统文件
// 类似于文件里的行连接 MySQL 服务器
• 使用 mysql 命令
知
识
讲
解
– mysql [ -h 服务器 -u 用户名 -p 密码 数据库 ]
– quit 或 exit 退出使用 mysql> 管理环境
• 操作指令类型
知
识
讲
解
– MySQL 指令:环境切换、看状态、退出等控制
– SQL 指令:数据库定义 / 查询 / 操纵 / 授权语句
• 基本注意事项
– 操作指令不区分大小写(密码、变量值除外)
– 每条 SQL 指令以 ; 结束或分隔 DDL 数据定义语言
–
–
DDL 数据定义语言
(create alter drop)
不支持 Tab 键自动补齐
DML 数据操作语言
\c 可废弃当前编写错的操作指令 ( insert update delete )
DCL 数据控制语言 (grant revoke)
DTL 数据事物语言
(commit rollback savepoint )MySQL 基本操作库管理命令
• 库 类似于系统的文件夹
知
识
讲
解
– Show databases; // 显示已有的库
// 切换库
– Use 库名 ;
– Select database(); // 显示当前所在的库
– Create database 库名 ; // 创建新库
// 显示已有的表
– Show tables;
– Drop database 库名; // 删除库库管理命令 ( 续 1)
• 数据库的命名规则
知
识
讲
解
– 可以使用数字 / 字母 / 下划线,但不能纯数字
– 区分大小写,具有唯一性
– 不可使用指令关键字、特殊字符表管理命令
• 新建指定名称的表
知
识
讲
解
– CREATE TABLE 库名 . 表名 (
字段名 1 字段类型 ( 宽度 ) 约束条件 ,
字段名 2 字段类型 ( 宽度 ) 约束条件 ,
.. ..
字段名 N 字段类型 ( 宽度 ) 约束条
);表管理命令 ( 续 1)
• 表 类似于系统的文件
知
识
讲
解
– Desc 表名 ; // 查看表结构
– Select * from 表名; // 查看表记录
– Drop table 表名 ;
// 删除表记录管理命令
• 记录 类似于文件里的行
知
识
讲
解
– Select * from 表名 ; // 查看表记录
– Insert into 表名 values( 值列表 );// 插入表记录
– Update 表名 set 字段 = 值 ; // 修改表记录
– Delete from 表名 ; // 删除表记录案例 2 :数据库基本管理
1. 使用 mysql 命令连接数据库
2. 查看 / 删除 / 创建库
课
堂
练
习
3. 查看 / 删除 / 创建表(参考图示表格)MySQL 数据类型
常见的信息种类 常见的信息种类
数值类型 数值类型
整数型
浮点型
MySQL 数据类型
字符类型 字符类型
日期时间类型 日期时间类型
时间函数
枚举类型 枚举类型
约束条件 约束条件常见的信息种类常见的信息种类
• 数值型:体重、身高、成绩、工资
• 字符型:姓名、工作单位、通信住址
知
识
讲
解
• 枚举型:兴趣爱好、性别
• 日期时间型:出生日期、注册时间数值类型数值类型
类 型
知
识
讲
解
大 小 范围(有符号) 范围(无符号)
TINYINT 1 字节 -128~127
0 ~ 255
SMALLINT 2 字节 -32768~32767 0 ~ 65535
用 途
微小整数
小整数
MEDIUMINT 3 字节 -2 23 ~ 2 23 -1 0 ~ 2 24 -1 中整数
INT 4 字节 -2 31 ~ 2 31 -1 0 ~ 2 32 -1 大整数
BIGINT 8 字节 -2 63 ~ 2 63 -1 0 ~ 2 64 -1 极大整数
FLOAT 4 字节 单精度浮点数
DOUBLE 8 字节 双精度浮点数
DECIMAL 对 DECIMAL(M,D) ,其中 M 为有效位数、 D 为小
数位数, M 应大于 D ,占用 M+2 字节整数型
• 关于整数型字段
知
识
讲
解
– 使用 UNSIGNED 修饰时,对应的字段只保存正数
– 数值不够指定宽度时,在左边填空格补位
– 宽度仅是显示宽度,存数值的大小由类型决定
– 使用关键字 ZEROFILL 时,填 0 代替空格补位
– 数值超出范围时,报错。整数型(续 1 )
• 了解表的字段设置
– DESC 或 DESCRIBE ,查看表结构
知
识
讲
解
字段名 | 字段类型 | 是否为空 | 是否为主键 | 默认值 | 描
述信息浮点型
• 关于浮点型字段
知
识
讲
解
– 定义格式: float( 总宽度 , 小数位数 )
– 当字段值与类型不匹配时,字段值作为 0 处理
– 数值超出范围时,仅保存最大 / 最小值字符类型字符类型
• 定长: char( 字符数 )
知
识
讲
解
– 最大长度 255 字符
– 不够指定字符数时在右边用空格补齐
– 字符数断超出时,无法写入数据。
• 变长: varchar( 字符数 )
– 按数据实际大小分配存储空间
– 字符数断超出时,无法写入数据。
• 大文本类型: text/blob
– 字符数大于 65535 存储时使用日期时间类型日期时间类型
• 日期时间, DATETIME
知
识
讲
解
– 占用 8 个字节
– 范围: 1000-01-01 00:00:00.000000
~ 9999-12-31 23:59:59.999999
• 日期时间, TIMESTAMP
– 占用 4 个字节
– 范围: 1970-01-01 00:00:00.000000
~ 2038-01-19 03:14:07.999999日期时间类型(续 1 )
• 日期, DATE
知
识
讲
解
– 占用 4 个字节
– 范围: 0001-01-01 ~ 9999-12-31
• 年份, YEAR
– 占用 1 个字节
– 范围: 1901~2155
• 时间, TIME
– 占用 3 个字节
– 格式: HH:MM:SS日期时间类型(续 2 )
• 关于日期时间字段
知
识
讲
解
– 当未给 TIMESTAMP 字段赋值时,自动以当前系统时
间赋值,而 DATETIME 字段默认赋值为 NULL
• YEAR 年份的处理
– 默认用 4 位数字表示
– 当只用 2 位数字赋值时, 01~69 视为 2000~2069 ,
而 70~99 视为 1970~1999日期时间类型(续 3 )
• 创建一个学员表
– 包括姓名、入学年份、生日、培训时间段
知
识
讲
解时间函数
类 型
知
识
讲
解
用 途
now() 获取系统当前日期和时间
year() 执行时动态获得系统日期时间
sleep(N) 休眠 N 秒
curdate() 获取当前的系统日期
curtime() 获取当前的系统时刻
month() 获取指定时间中的月份
date() 获取指定时间中的日期
time() 获取指定时间中的时刻时间函数(续 1 )
• 无需库、表,可直接调用
– 使用 SELECT 指令输出函数结果
知
识
讲
解枚举类型枚举类型
• 从给定值集合中选择单个值, ENUM
– 定义格式: enum( 值 1, 值 2, 值 N)
知
识
讲
解
• 从给定值集合中选择一个或多个值, SET
– 定义格式: set( 值 1, 值 2, 值 N)案例 3 : MySQL 数据类型
1. 在 studb 库里创建 stuinfo 表,
2. 表结构自定义,并合理使用数据类型。
课
堂
练
习总结和答疑
安装 MySQL
问题现象 1
故障分析及排除
问题现象 2
故障分析及排除
总结和答疑
MySQL 基本使用
问题现象 1
故障分析及排除
问题现象 2
故障分析及排除安装 MySQL问题现象 1
• 执行升级安装失败
– 报错:
知
识
讲
解
libaio.so.1()(64bit) is .. ..
libaio.so.1(LIBAIO_0.4)(64bit) is ....
[root@dbsvr1 ~]# rpm -Uvh MySQL-*.rpm
error: Failed dependencies:
libaio.so.1()(64bit) is needed by MySQL-embedded-5.6.15-
1.el6.x86_64
libaio.so.1(LIBAIO_0.1)(64bit) is needed by MySQL-embedded-
5.6.15-1.el6.x86_64
libaio.so.1(LIBAIO_0.4)(64bit) is needed by MySQL-故障分析及排除
• 原因分析
知
识
讲
解
– 安装的 RPM 包有依赖
– 安装的 RPM 包和系统自带的软件包 版本不匹配
• 解决办法
– 安装依赖的软件
[root@dbsvr1 ~]#yum -y install libaio
// 安装依赖的包
[root@dbsvr1 ~]# rpm -q libaio
// 查看是否安装成功
libaio-0.3.107-10.el6.x86_64问题现象 2
• 安装依赖包后,执行升级安装依然失败
知
识
讲
解
– 报错: A MySQL server package (mysql-server-5.
1.73-5.el6_6.x86_64) is installed
[root@dbsvr1 ~]# rpm -Uvh MySQL-*.rpm
.. ..
error: %pre(MySQL-server-5.6.15-1.el6.x86_64) scriptlet failed,
exit status 1
error: install: %pre scriptlet failed (2), skipping MySQL-server-
5.6.15-1.el6故障分析及排除
• 原因分析:
知
识
讲
解
– 系统已经安装了提供 MySQL 数据库服务器的软件包
– 并且和当前安装的软件不兼容,所以升级失败
• 解决办法:
– 卸载不兼容的低版本软件包,再单独安装高版本的提
供数据库服务的软件包
[root@dbsvr1 ~]# rpm -qa | grep -i mysql-server
mysql-server-5.1.73-5.el6_6.x86_64
[root@dbsvr1 ~]# rpm -e --nodeps mysql-server
[root@dbsvr1 ~]# rpm -ivh MySQL-server-5.6.15-1.el6.x86_64.rpmMySQL 基本使用问题现象 1
• 创建新数据库失败
– 报错: ERROR 1007 (HY000): Can't create .......
知
识
讲
解
mysql> create database test;
ERROR 1007 (HY000): Can't create database 'test'; database exists
mysql>故障分析及排除
• 原因分析
知
识
讲
解
– 提示数据库已经存在,
– 没有遵守建库规则,数据库名不符合唯一性
• 解决办法
– 检查现有库,新建库时使用其他名字
mysql> show databases;
| test
|
.. ..
mysql> create database test_1;
Query OK, 1 row affected (0.07 sec)问题现象 2
• 登录数据库系统后,创建新表失败
– 报错: ERROR 1046 (3D000): .. ..
知
识
讲
解
[root@dbsvr1 ~]# mysql -uroot -p123
mysql> create table stu_tab(name char(10));
ERROR 1046 (3D000): No database selected故障分析及排除
• 原因分析
– 建表之前没有选择库,导致无法确定创建位置
知
识
讲
解
• 解决办法
– 提前库,或者建表时指定数据库
mysql> create table test_1.stu_tab(name char(10));
Query OK, 0 rows affected (0.73 sec)