1 mysql简介
一般写某个东西先介绍一下,我就老生常谈的简单介绍下(摘自维基百科)
https://zh.wikipedia.org/wiki/MySQL
MySQL(官方发音为英语发音:/maɪ ˌɛskjuːˈɛl/“My S-Q-L”[1],但也经常读作英语发音:/maɪ ˈsiːkwəl/“My Sequel”)原本是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。
MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。
但被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展,因此导致自由软件社区们对于Oracle是否还会持续支持MySQL社区版(MySQL之中唯一的免费版本)有所隐忧,因此原先一些使用MySQL的开源软件逐渐转向其它的数据库。例如维基百科已于2013年正式宣布将从MySQL迁移到MariaDB数据库[2]。MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB
2基本用法
1,关于mysql的引擎
查看默认存储引擎
show variables like 'storage_engine';
查看mysql支持的存储引擎
show variables like 'have%';
InnoDB MyISAM MEMORY 的存储引擎
InnoDB 优势在于提供了良好的事务管理,崩溃修复能力和并发控制。特点:读写效率稍微差,占用的数据空间相对比较大
MyISAM 优势在于占用空间小,处理速度快,缺点不支持事务的完整性和并发性。
MEMORY不常用。
InnoDB储存引擎支持事务处理,支持外键。同时支持崩溃修复能力,和并发控制。如果需要对事务的完整性要求比较高,要求实现并发控制,那选择InnoDB存储引擎有很大的优势。如果频繁的进行更新,删除操作的数据库,也可以选择InnoDB存储引擎。应为改存储引擎可以实现事务的提交和回滚。
MyISAM存储引擎的插入数据快,空间和内存使用比较低。如果表主要用于插入记录和读出记录,那么选择MyISAM比较高效率。如果应用的完整性,并发性要求低,也可以选择。
2基本用法
1. 忘记root密码
编辑mysql主配置文件 my.cnf 在[mysqld]字段下添加参数 skip-grant-tables ,重启数据库服务,这样就可以进入数据库不用授权了 mysql -uroot ,修改相应用户密码
use mysql;
update user set password=password('your password') where user='root';
flush privileges;
在mysql5.7中不建议使用上边的方法
ALTER USER
基本使用
ALTER USER testuser IDENTIFIED BY '123456';
修改当前登录用户
ALTER USER USER() IDENTIFIED BY '123456';
使密码过期
ALTER USER testuser IDENTIFIED BY '123456' PASSWORD EXPIRE;
使密码从不过期
ALTER USER testuser IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
按默认设置过期时间
ALTER USER testuser IDENTIFIED BY '123456' PASSWORD EXPIRE DEFAULT;
指定过期间隔
ALTER USER testuser IDENTIFIED BY '123456' PASSWORD EXPIRE INTERVAL 90 DAY;
在MySQL文档里,推荐使用ALTER USER修改用户密码
SET PASSWORD
使用SET PASSWORD的password有两种:
使用默认加密
SET PASSWORD FOR testuser = '123456'
使用PASSWORD()函数加密
SET PASSWORD FOR testuser = PASSWORD("123456")
注意:使用PASSWORD('auth_string')的方式已经被废弃,在以后的版本会把它移除,所以不建议使用它来修改密码。
最后修改/etc/my.cnf 去掉 skip-grant-tables , 重启mysql服务
当我们第一次使用mysql命令的时候我们提示命令不存在的时候,我们加入path就行了
在配置文件中
/etc/profile 中
PATH=$PATH:/usr/local/mysql/bin
然后别忘记
source /etc/profile
或者写全路径 /usr/local/mysql/bin/mysql -uroot
给 mysql root用户设置密码
mysqladmin -uroot password '123456'
登陆
mysql -uroot -p123456
2. skip-innodb 我们可以增加这个参数不使用innodb引擎。
3. 配置慢查询日志
#log_slow_queries = /path/to/slow_queries
#long_query_time = 1
4. mysql常用操作
查看都有哪些库 show databases;
查看某个库的表 use db; show tables;
查看表的字段 desc tb;
查看建表语句 show create table tb;
show create table tb\G; (格式化输出)
当前是哪个用户 select user();
当前库 select database();
创建库 create database db1;
指定字符集:
创建表 create table t1 (`id` int(4), `name` char(40));
查看数据库版本 select version();
查看mysql状态 show status;
修改mysql参数 show variables like 'max_connect%'; set global max_connect_errors = 1000;
查看mysql队列 show processlist;
插入:
创建普通用户并授权 grant all on *.* to user1 identified by '123456';
grant all on db1.* to 'user2'@'10.0.2.100' identified by '111222';
grant all on db1.* to 'user3'@'%' identified by '231222';insert into tb1 (id,name) values(1,'aming');
on后边加授权的库
% 所有的意思。。。。
更改密码 UPDATE mysql.user SET password=PASSWORD("newpwd") WHERE user='username' ;
查询 select count(*) from mysql.user;
select * from mysql.db;
select * from mysql.db \G; (格式化输出)
select * from mysql.db where host like '10.0.%';
插入 update db1.t1 set name='aaa' where id=1;
清空表 truncate table db1.t1;
删除表 drop table db1.t1;
删除数据库 drop database db1;
修复表 repair table (表名)tb1 [use frm];(可以最好加上)
删除表中的某一个
打开使用innodb
vim /etc/my.cnf(这个文件)
show variables;列出标的参数
show variables like 'version';(使用like过滤)
% % 模糊查询
set 修改某个参数:(局部生效,,重新启动后就恢复了)
一般我们修改的 max_connections
show processlist; (查看队列,查看链接数据库状态)
查询行数:(查询mysql表字段的行数
5. mysql备份与恢复
备份 mysqldump -uroot -p123456 db >1.sql
恢复 mysql -uroot -p
db(创建一个新表) <1.sql
只备份一个表 mysqldump -uroot -p db tb1 > 2.sql
-d(只备份创建表的语句)
备份时指定字符集 mysqldump -uroot -p --default-character-set=utf8 db >1.sql
恢复也指定字符集 mysql -uroot -p --default-character-set=utf8 db < 1.sql
面试常问的: