mysql学习笔记(有待增补)
- mysql的连接:
mysql -h host -u user -p 回车输入密码 - 展示数据库以及使用数据库
show databases;
use test
grant all on database_name.* to 'your_nysql_name'@'your_client_host' 设置权限你能访问的数据库
grant all on *.* to 'your_nysql_name'@'your_client_host'
revoke all on database_name.* from 'your_nysql_name'@'your_client_host' - 查看默认的存储引擎
show variables like 'default_storage_engine'; - 查看数据库支持的存储引擎
show engines\G - 查看表的相关信息
show table status like 'table_name'\G; - 针对MYISAM表,可以手工或自动执行检查和修复操作
check table xxx
repair table xxx
myisamchk 命令行工具进行检查和修复(这个有待研究) - mysql有两个级别的锁等待,服务器级别和存储引擎级别 事务特性:原子性、一致性、隔离性、持久性隔离级别:未提交读、提交读、可重复读、可串行读
-
未提交读(read uncommitted):一个事务还未提交,它所做的变更能被别的事务看到。事务可以读取未提交的数据,被称为脏读(dirty read),这种隔离级别在实际应用中一般很少使用;
-
提交读(read committed):一个事务提交之后,它所做的变更才能被别的事务看到。大多数数据库的默认隔离级别是提交读(read committed),比如 Oracle;
-
可重复读(repeatable read):一个事务在执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。在可重复读隔离级别下,未提交变更对其他事务也是不可见的。该级别保证了在同一个事务中,多次读取同样记录的结果是一致的。MySQL 的默认事务隔离级别是可重复读(repeatable read);
-
可串行化(serializable):serializable 是最高的隔离级别。对同一行数据,读写都会进行加锁。当出现锁冲突时,后面访问的事务必须等前一个事务完成,才能继续执行。实际应用场景很少用到这种隔离级别,只有在非常需要确保数据一致性,而且可以接受没有并发的情况,才会使用这种隔离级别。
- 数据库的备份
mysqldump -u root -p --all-databases > /tmp/all_databases.sql(备份所有的数据库) - 数据库的逻辑恢复
mysql -uroot -p123 databasename < /tmp/all_databases.sql(完全恢复) - 定位分析SQL
查看当前的线程和慢日志
show processlist (查看正在执行的sql语句)或者通过表information_schema.processlist
分析SQL的执行计划
explain (type key table,type在range范围上为好 性能由差到好:ALL、index、range、ref、eq_ref、const)
查看SQL的执行步骤跟时间
set profiling=1;
show profiles;
show profile for query 2; - 多版本并发控制(MVCC)
行级锁的一个变种,典型的实现有乐观并发控制和悲观并发控制 - MySQL慢查询
查看慢查询是否开启
show variables like 'slow_query_log';
开启慢查询
set global slow_query_log='ON';
查看慢查询规定时间
show variables like 'long_query_time';
设置慢查询的时间
set global long_query_time=1;(更改配置需要重启数据库)
设置慢查询日志文件保存地址
set global slow_query_log_file='/var/lib/mysql/test.log';(地址自定义) - ddd
- xxx
- 更多细节可参考
http://www.imooc.com/wiki/mysqladvanced/serveroptimize.html