mysql的基本操作
创建表create table user(user_id int(100) not null,user_name char(20) not null, user_pwd char(100) not null, primary key(user_id))
插入数据insert into user(user_id,user_name,user_pwd)values(‘1′,’zhangshan’,password(‘123123’));
修改数据update user set user_pwd=password(‘xxx’) where user_id=’1′;
删除数据delete from user where user_name=’zhangshan’;
查询数据select * from user where user_name=’zhangshan’;
授权 grant all on *.* to ‘abc’@’%’ identified by ‘123123’;
查看用户权限show grants for ‘abc’@’%’;
撤销权限 revoke all on *.* from ‘abc’@’%’
创建普通索引create index user_name_index on user(user_name);
查看索引show index from user;
创建唯一性索引create unique index user_pwd_unique on user(user_pwd);
删除主键索引alter table user drop primary key;
创建主键索引alter table user add primary key(user_id);
删除普通索引drop index user_name_index on user;
删除唯一性索引 alter table user drop index user_pwd_unique;
开始一个事务begin;提交commit;回滚rollback
关闭自动提交set autocommit = 0;
开始自动提交set autocommit = 1;
创建用户create user ‘amber’@’%’ identified by ‘123123’;
删除用户 drop user amber;
改用户名rename user ‘amber’@’%’ to ‘admin’@’%’;
改来源地址rename user ‘admin’@’%’ to ‘admin’@’192.168.1.%’;
改用户名及来源地址rename user ‘admin’@’192.168.1.%’ to ‘amber’@’%’;
查看当前用户select user();
修改密码 set password=password(‘123123’);
修改用户密码set Password for ‘amber’@’%’ =password(‘123123’);
跳过授权表登陆
service mariadb stop
mysqld_safe –skip-grant-tables &
mysql -e “update mysql.user set Password=password(‘123123’) where User=’root'”
service mariadb start
mysql -uroot -p123123
授权 grant select,drop,delete,update,insert on *.* to ‘amber’@’%’ identified by ‘123123’;
授权并授予授权的权限grant all on *.* to ‘amber’@’%’ identified by ‘123123’ with grant option;
日志分类:错误日志,二进制日志,通用日志,慢查询日志
错误日志:log-error = mysql_error.log
二进制日志:log-bin=mysql-bin
通用日志:log = mysql_general.log
慢查询日志:long_query_time = 5秒
log-slow-queries = mysql_slow.log
查看字符编码:show variables like “character%”;
设置utf8
client:default-character-set=utf8
mysqld:character-set-server = utf8
mysql:default-character-set=utf8
修改默认存储引擎:default-storage-engine = InnoDB
mysql备份:物理。逻辑
一种tar直接打包或者cp数据文件
一种mysqldump
备份auth数据库:mysqldump -uroot -p123123 auth >/root/back/mysql.auth.$(date +%F).sql
恢复:mysql -uroot -p123123 auth </root/back/mysql.auth.$(date +%F).sql
备份全部数据库: mysqldump -uroot -p123123 –opt –all-databases > /root/back/mysql.all.$(date +%F).sql
恢复: mysql -uroot -p123123 < mysql.all.2018-08-27.sql
备份auth的user表:mysqldump -uroot -p123123 auth user > /root/back/mysql-auth.user.$(date +%F).sql
恢复:mysql -uroot -p123123 auth < mysql-auth.user.2018-08-27.sql
mysqlbinlog: unknown variable ‘default-character-set=utf8’出现报错加上–no-defaults即可mysqlbinlog –no-defaults mysql-bin.000007
增量备份:二进制日志
max_binlog_size = 102400最大1M超过刷新到另一个二进制日志
立即刷新二进制日志: mysqladmin -uroot -p123123 flush-logs
定期执行mysqladmin -uroot -p123123 flush logs
定期备份二进制日志
基于时间点的恢复mysqlbinlog –no-defaults –stop-datatime=xxxx-xx-xx xx:xx:xx 二进制日志 |mysql -uroot -p123123
mysqlbinlog –no-defaults –start-datatime=xxxx-xx-xx xx:xx:xx 二进制日志 |mysql -uroot -p123123
基于某个时间点的恢复
mysqlbinlog –no-defaults –start-datatime=xxxx-xx-xx xx:xx:xx –stop-datatime=xxxx-xx-xx xx:xx:xx 二进制日志 |mysql -uroot -p123123
基于位置的恢复
mysqlbinlog –stop-position=’id’ 二进制日志 |mysql -uroot -p123123
mysqlbinlog –start-position=’id’ 二进制日志 |mysql -uroot -p123123
mysql存储引擎:myisam,innodb
myisam特点:不支持事务,表级锁定形式,数据在更像是锁定整个表,
数据库在读写过程中相互阻塞,读的时候阻塞用户的读取,会在写的过程中阻塞用户的读取,可以通过key_buffer_size来设置缓存索引,提高访问性能,减少磁盘IO压力,但缓存只会缓存文件,不会缓存数据
采用myisam存储引擎不支持外键约束,只支持全局索引
每个myisam在磁盘上存储成三个文件,每一个文件的名字已表的名字开始,扩展名指出文件类型,.rrm文件存储表定义,.MYD文件存储数据,.MYI文件存储索引定义
myisam使用场景
公司业务不需要事务支持
一般单方面数据比较多的业务,或者单方面写入数据比较多的业务,如:www.blog,图片信息数据库,用户数据库,商品库等业务,myisam存储引擎读写数据读写都比较平凡的场景不适合
对数据业务一致性要求不是非常高的业务
使用读写并发访问相对较低的业务,
数据修改相对较少的业务
服务器硬件资源相对比较差
innodb特点:支持事务
行级锁定,但是全表扫描仍然回事表级锁定
读写阻塞与事务隔离级别相关
具有非常高效的的缓存特性,能缓存索引,也能缓存数据
表与主键已簇的方式存储
支持分区,表空间
支持外键约束
对硬件资源要求比较高
innodb使用场景
业务需要事务支持
行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引来完成
业务数据更新较为频繁的场景,如:论坛,微博
业务数据一致性要求很高,如:银行业务
硬件设备内存较大,利用innodb较好的缓存能力来提高内存利用率,减少磁盘IO的压力
查看默认存储引擎:show engines;
查看某张表的存储引擎show create table auth.user \G
修改存储引擎:alter table auth.user engine=myisam;
创建表时指定存储引擎:create table aaa(test_user char(20) not null) engine=innodb;
主从复制原理:从服务器开启IO线程,向主服务器请求数据同步(获取二进制日志)
主服务器开启IO线程回应从服务器
从服务器将得到的二进制日志写入中继日志
从服务器开启SQL线程将日志内容执行,实现数据同步
设置存储引擎和字符集
【mysqld】
default-storage-engine = innodb
character-set-server = utf8
【client】
default-character-set=utf8
【mysql】
default-character-set=utf8
版权声明:本文为aisa原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。