官网:http://dev.mysql.com/downloads/mysql

1.什么是数据库?
  存储数据的仓库
  DB 数据库 DBMS 数据库管理系统 DBS 数据库系统 即DB+DBMS

连接数据库的方式

命令行
工具软件:提供图形界面对数据做管理

2.搭建数据库服务器?
3.连接方式 使用规则 基本操作 ?
4.MySQL数据类型 字符类型 数据类型 日期时间 枚举 ?
5.数据库错误日志文件路径(初始密码存储位置)

主配置文件 /etc/my.cnf
传输协议 tcp
数据库目录 /var/lib/mysql
stuinfo.frm 存放表头信息 stuinfo.ibd 存放数据信息
floa单精度 0–2^32-1 double双精度 0–2^64-1

MYSQL默认日志存储路径

/var/log/mysqld.log

新安装密码存放路径

   grep “password”   /var/log/mysqld.log

修改登录密码

    alter user root@”localhost” identified by “密码”;
    mysqladmin -uroot  -p密码  password “新密码”

修改密码规则

show variables like 'validate_password%';
validate_password_length=6
validate_password_policy=0

数据库的增删改查

drop  database  库名;   //删除库
drop  table  库.表;         //删除表
delete  from 库.表;     //删除表所有记录
delete  from 库.表   where   条件;    //删除表表符合条件的内容

create   database/table  库/库.表;       //创建新的库/表
insert   into  库.表[(指定插入的字段)] values();   //插入字段值   

update  库.表  set  字段=值   [where]  条件;    //更新字段内容,可加条件

desc  查看表结构  show 查看       select 


常见的信息种类

  数值型

  字符型

  枚举型

  日期时间型

 

数值类型

 

 

 浮点型

日期时间类型

datetime / timestamp    格式: yyyymmddhhmmss
当未给timestamp字段赋值时,自动以当前系统时间赋值,而datetime值为null
date   yyyymmdd
year yyyy
01--69视为 2001-2069    70--99视为 1970--1999
time  HH:MM:SS

时间函数

枚举类型

enum   格式: 字段名   enum(值1,值2...)  仅能选一个值,并且必须在列表选择
set   格式:字段名 (值1,值2...)  选择一个或者多个,字段值必须在列表里选择

约束条件

 create table t4(name char(10) not null,homeaddr char(30) not null default "");
 mysql> create  table t2(class char(9),name char(10) not null default "",age tinyint not null default "19",likes set("a","b","c","d") default “a,b”);

 

 

 修改表结构

Mysql>alter table  库名.表名  执行动作

add 添加字段
modify 修改字段类型
change 修改字段名
drop 删除字段
rename 修改表名

添加字段

  mysql> alter table t1 add dirke enum("weater","kele") first;  //添加字段到首行
  mysql> alter table t1 add play set("sleep","read","run") not null  default "sleep" after dirke;   //添加字段到指定字段下,如不指定默认为最底行.
+-------+---------------------------+------+-----+----------+-------+
| Field | Type                      | Null | Key | Default  | Extra |
+-------+---------------------------+------+-----+----------+-------+
| dirke | enum('weater','kele')      | YES  |     | NULL     |       |
| play  | set('sleep','read','run')    | NO   |     | sleep    |       |
| name | char(10)                  | NO   |     | NULL     |       |
| age   | tinyint(3) unsigned       | YES  |     | 19       |       |
| class  | char(7)                   | NO  |     | nsd1907  |       |
| pay    | float(7,2)                | YES  |     | 28000.00 |       |
+-------+---------------------------+------+-----+----------+-------+
mysql>insert into t1 values("weater","sleep,read","tom","18","nsd1908","30000.00");
修改字段名:
mysql> alter table t1 change name xingming varchar(20) not null default "yy";
        change可以修改字段名称,也可以修改字段类型.
删除字段:
 mysql> alter  table  t1  drop party,drop your_chart;
修改表名 eg:
 mysql> alter table t2 rename wb;  
 mysql> alter table  t1  add qq  char(11) not null,add sina varchar(20), modify xuexiao varchar(30) not null default "CN",change birthday shengri char(8),drop qq;   //综合

MySQL 键值Index 索引 btree 使用二叉树木算法一个表中可以有多个Index字段,字段值允许重复,且可以赋null值,通常把作为查询条件的字段设置为index字段,index字段的标志是 MUmysql> create table t1 (name char(9) not null default "xbb",age tinyint unsigned,pay float(5,1),index(name),index(age)); //建表时添加index字段

mysql> create  index  索引名  on a(字段名);    //在已有表里添加index字段
mysql> show index from  a\G;       //查看索引信息
mysql> drop index ab on a;          //删除索引
在已有表里添加主键 mysql>alter table 表名 add primary key(字段名); 复合主键 create table t3(name char(10),class char(10),pay enum("yes","no"),primary key(name,class,pay)); //建表时创建复合主键(多个字段作为主键) mysql>insertintot3values("bob","nsd1907",yes),("bob","nsd1908",yes),("bob","nsd1907",no); mysql> create table t4 (id int primary key auto_increment,name char(10),age tinyint unsigned,class char(7) default "nsd1907");(每次增加表记录,主键值自增1,在不赋予指定值得情况下,字段值不允许重复,且不允许赋空值null(若设置 auto_increment,则若输入null时,自增长1)). 主键通常与 auto_increment 连用,自增长依赖主键. 删除主键: mysql> alter table t4 modify id int not null; 移除主键前,如果有自增属性,必须先去掉 mysql> alter table t4 drop primary key; 取消主键 eg: mysql> insert into t4 values(null,"yy",28,"nsd1917"); Foreign key 外键 功能:插入记录时,字段值在另一个表字段值范围内选择. 使用规则:表存储引擎必须是innodb,字段类型要一致,被参照字段必须时索引类型的一种(primary key) mysql> create table yg(yg_id int primary key auto_increment,name char(9))engine=innodb; mysql> insert into yg(name) values("wb"),("bb"),("yy"),("xbb"); mysql> create table gz(gz_id int,gz float(7,2),foreign key(gz_id) \ //创建字段时指定外键 references yg(yg_id) \ //参照字段 on update cascade \ //同步更新 on delete cascade) \ //同步删除 engine=innodb; //指定存储引擎 mysql> delete from gz; mysql> alter table gz add primary key(gz_id);
删除外键 mysql
> show create table gz; mysql> alter table gz drop foreign key gz_ibfk_1; mysql> show create table gz;

 

数据的导入导出

数据库导入导出默认检索目录 /var/lib/mysql-files/
自定义检索目录
mkdir /myload 目录必须真实存在,且用户所有者为mysql用户;


 vim /etc/my.cnf
 [mysqld]
 secure_file_priv=”/myload”   指定检索目录
 systemctl  restart  mysqld   重新加载配置文件

Mysql在登录状态下使用shell脚本 前面要使用 system命令.

数据导入的步骤?

  1.把系统文件拷贝到检索目录下;

   mysql>system  cp /etc/passwd   /myload/

  2.创建存储数据的库和表

  Mysqld>create table user(name char(50),passwd char(1),uid int,gid int,comment char(150),homedir char(150),shell char(150));

  3.导入数据

mysql> load data infile “/myload/passwd” into table user fields terminated by “:” lines terminated by “\n”;
mysql> alter table user add id int primary key auto_increment first; 添加id字段,添加主键,自增长.

  4.查看数据

desc user;
select * from user\G;

数据的导出

  mysql> select name,uid,shell,id from user where homeaddr="/root"into outfile "/myload/user.txt" fields terminated by "::" lines terminated by "\n";  //指定分隔符和换行符

查询表记录

  mysql> select name,passwd from user where 10>id and id>5;
         delete from yg where yg_id=3;

更新表记录(删除差不多)

  mysql> update t1 set play=run where xingming="wb";

 

匹配条件
数值比较,字段必须是数值类型

 

 

 字符比较,字段必须是字符类型

 

 

逻辑匹配,多个判断条件时使用

 

 

范围匹配/去重显示,匹配范围内的任意一个值即可

 

 

高级匹配条件
模糊查询
用法 --where 字段名 like “通配符” “_” 匹配一个字符 “%”匹配0-n个字符

正则表达式
用法 --where 字段名 regexp ‘正则表达式’ //正则查询必须加regexp选项
^以什么开头 $以什么结尾 . 匹配所有 * 匹配前面字符任意次数 [] 匹配选项任意一个即可 | 或者

四则运算
字段必须是数值类型

 

 

select 数值字段(符号)数值字段 from 表 [条件]

聚集函数,MySQL内置数据统计函数

 

 

select 函数(字段名) from 表 [条件]

查询结果排序

  SQL查询 order by 字段名(通常是数值类型字段) [asc|desc];
  asc 升序排序 默认为asc
  desc 降序排序

查询结果分组

  SQL查询 group by 字段名; //跟去重查询区别不一样,查询结果分组时执行查询后的结果.

 数据备份

用户授权:在数据库服务器上添加新的连接用户;
撤销授权:删除添加的用户对数据的访问权限;
删除用户:把新添加的用户删除;
授权库: mysql库(系统默认存在)----------> 保存新添加的用户信息和权限信息;


数据备份策略有哪几种?

  完全备份 -----------------> 备份所有数据
  增量备份 ------------------> 备份上次备份后,所有新产生的数据
  差异备份 ------------------> 备份完全备份后,所有新产生的数据
  Binlog日志也叫二进制日志,记录除查询之外的\所有sql命令,可用于数据备份与恢复.

数据的备份方法有哪几种?

  冷备份(也称作物理备份): cp tar

  逻辑备份

  增量备份

冷备份(也称作物理备份): cp tar

cp  -r   /var/lib/mysql/   备份目录/文件名
Tar  -zcvf /root/mysql.tar.gz  /var/lib/mysql/*

恢复操作

cp  -r  备份/文件名   /var/lib/mysql/
Tar  -zxvf   /root/mysql.tar.gz  /var/lib/mysql/
Chown  -R  /var/lib/mysql/

 

逻辑备份

mysqldump -uroot  -p密码 (-A(所有),-B库名1 库名2,库名,库名 表名) > 目录/文件名

恢复数据

mysql -uroot -p密码  [库名]  < 目录/文件名 ------------->若要恢复某个库数据或表的数据,首先得新建空库,再执行恢复.
一定要验证用户对目录的权限.

 

增量备份

  启用binlog日志来备份和恢复数据
  Binlog日志也称为二进制日志;
  binlog日志记录除查询命令以外的sql命令,属于mysql服务日志的一种;

配置mysql主从同步的必要条件:

  启用binlog日志文件:

log_bin=/mysql/zl.log(目录要存在,且对mysql有权限)
server_id=50(1-255)

 查看增量日志信息 默认日志文件大小为1G,若文件内存不足,则自动创建新的日志文件,也可以手动创建新的日志文件,则数据库自动使用数值最大的日志文件.

show master status

 

手动创建新的日志文件:

  1.systemctl restart mysqld
  2.mysql>flush logs;
  /]# mysql -uroot -p密码 -e “flush log”; 

3.完全备份的时候加上这个选项,自动生成日志文件

mysqldump --flush-logs 
/]# mysqldump --flush-logs -uroot -phahaha -A > /myload/wq.sql 

2.删除指定编号之前的binlog日志文件

mysql> purge master logs to “zl.000014”; (删除指定表号之前的日志文件)
mysql> reset master; 删除所有日志,重建新日志 

 

使用binlog日志恢复数据

1.在主配置文件中写入 binlog_format=“mixed” ,修改记录模式为混合模式,在配置文件内添加字段:修改记录方式为 “混合模式”,混合模式可以显示易读的偏移量与时间,用来恢复数据.
2.拷贝日志文件给用来恢复数据的服务器主机;

Mysqlbinlog(–start(stop)-datetime=”yyyy-mm-ddhh:mm:ss”,–start(stop)-position=数字(起始or结束偏移量)) | mysql -uroot -p密码 ------->恢复指定范围内数据3.mysqlbinlog 日志文件名称 | mysql -uroot -p密码 恢复上次备份后所有数据

 

恢复指定范围内的数据:

  要是想恢复到最后一条操作命令的数据只需要指定起始的”时间”或”偏移量”,系统默认恢复到最后一条命令.若只指定结束的时间或者偏移量,则默认恢复全部.
  实验使用另外一台服务器恢复数据,必须提前创建好要恢复的库;
  读取日志文件的指定命令范围恢复数据;

日志的记录模式有哪几种?

  1.statement 报表模式
  2.row 行模式
  3.mixed 混合模式



使用percona软件完全备份数据

备份过程中不锁表,innobackupex组件以per\脚本封装xtrabaclup.
需要软件: percona-xtrabackup, libev
完全备份:

innobackupex --user 用户名 --password 密码 备份目录名 [–notimestamp]

完全恢复

systemctl stop mysqld
rm -rf /var/lib/mysql/*
Innobackupex --apply-log 目录名 //准备恢复数据
]# cat xtrabackup_checkpoints (可选操作查看)
backup_type = full-backuped (当完成准备恢复数据命令后,ful-backuped 会变为full-prepared)
Innobackupex --copyback 目录名 //恢复数据
chown -R mysql:mysql /var/lib/mysql/
systemctl start mysqld

 

 

恢复单张表数据:

模拟误删除一张表的数据,使用所有数据的备份来恢复单张表的数据.

sql>alter table db5.a discard tablespace; //删除表空间
]#innobackupex --apply-log --export 备份目录 //导出表信息
]#cp 目录/库.表名.{ibd,cfg,exp} 数据库目录/库名 //拷贝表信息
]#chown -R mysql:mysql /var/lib/mysql/ //授权
sql>alter table 库.表 import tablespace; //导入表空间
Sql> select ***
]#rm -rf /var/lib/mysql/库名/表.{cfg,exp}

 

 

增量备份与增量恢复:
增量备份

]#innobackupex --user root --password hahaha /fullback --no-timestamp //所有备份
]#innobackupex --user root --password hahaha --incremental /new1dir --incremental-basedir=/fullback --no-timestamp //增量备份
]#innobackupex --user root --password hahaha --incremental /new2dir --incremental-basedir=/new1dir --no-timestamp //增量备份

 

增量恢复数据

systemctl stop mysqld
rm -rf /var/lib/mysql/*
innobackupex --apply-log --redo-only /fullback/
Innobackupex --apply-log --redo-only /fullback/ --incremental-dir=/new1dir
cat xtrabackup_checkpoints
Innobackupex --apply-log --redo-only /fullback/ --incremental-dir=/new2dir
innobackupex --copy-back /fullback/
chown -R mysql:mysql /var/lib/mysql/
systemctl start mysqld

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

更多文章请关注《万象专栏》