MySQL进阶
一、MySQL授权
grant all on *.* to 'yunjisuan'@'192.168.200.128' identified by '123123';
授权 所有类型 on 库名.表名 to 用户名@允许远程的IP identified by '密码';
revoke select on *.* from 'yunjisuan'@'192.168.200.128';
撤销授权 查看类型 on 库名.表名 from 用户名@IP地址
MySQL通配符==>_(任意一个字符) %(任意字符)
刷新==>flush privileges;
查看当前登录用户==>select user();
MySQL用户修改密码:
update mysql.user set password=password('123123') where host='192.168.200.127';
password=password('密码')==>调用password函数生成加密密码
查看当前权限==>show grants;
查看其它权限==>show grants for '用户名@IP地址';
二、索引
索引的分类:普通索引、唯一索引、主键、全文索引、单列索引和多列索引
三、事物
事物的四个属性:ACID==>原子性、一致性、隔离性、持久性
触发事物==>begin;
触发回滚==>rollback;
事物结束提交==>commit;
查看MySQL全局变量==>show variables like '%autocommit%';
set autocommit=0(禁止自动提交) set autocommit=1(开启自动提交)
四、MySQL日志管理
包括:错误日志、通用查询日志、二进制日志、慢速查询日志
慢速查询日志:记录所有执行时间超过long_query_time的SQL语句
用于找到执行时间长的查询,加以优化
开启慢查询日志的命令==>log-slow-queries=mysql_slow.log
五、数据库备份
从物理与逻辑的角度可分为:物理备份和逻辑备份
物理备份可分为:①冷备份:在关闭数据库进行的
②热备份:数据库处于运行状态
③温备份:数据库锁定表格(不可写入但可读)的状态下进行的
备份命令:mysqldump(用了没法写数据,不能再主库上操作)
备份格式==>mysqldump -uroot -p123123 yunjisuan > /tmp/yunjisuan$(date +%F).sql
↑
库名(写库名备份的是表)
对数据库进行备份需要加--databases参数:
mysqldump -uroot -p123123 --databases yunjisuan > /tmp/yunjisuan$(date +%F).sql
↑
对yunjisuan这个库进行备份
对所有库进行备份==> --all-databases:
mysqldump -uroot -p123123 --opt --all-databases > /tmp/all$(date +%F).sql
↑ ↑
加速备份 所有库
备份后恢复数据库:
非交互式==>mysql -uroot -p123123 < /备份路径(恢复表需要些库名:mysql -uroot -p123123 yunjisuan < /备份路径)
交互式==>进入mysql==>source /备份路径
mysql增量备份
mysql二进制配置文件==>/etc/my.cnf
52行==>max_binlog_size = 1024000 ==>二进制日志最大1M
log-bin=mysql-bin==>开启二进制日志增量备份的功能
六、MySQL存储引擎
MyISAM特点:①不支持事物
②读写互相阻塞
③表级锁定,数据库在更新时锁定整个表
④可通过key_buffer_size来设置缓存索引,提高访问性能,减少磁盘压力
InnoDB特点:①写支持好,读支持差
②支持事物,功能复杂
③对硬件要求高
④缓存索引和数据占用内存高
七、MySQL主从复制
应用场景:主从同步、主从服务器实现读写分离
原理:MySQL主服务器开启binlog日志,将server id=1开启,开启IO线程,
MySQL从服务器开启中继日志,将server id=3开启(不能与主库一致),开启IO线程,
从库要验证主库的五个信息,成功后主从服务器通过IO线程将日志数据传递,
从服务器得到主二进制日志写入中继日志中,从服务器开启SQL线程将日志执行。
binlog日志==>log-bin=mysql-bin 中继日志==>relay-log=relay-bin
创建主从同步步骤:
主库:①打开my.cnf配置文件,开启binlog日志,开启server id=1,重启mysql
②grant replication slave on *.* to 'yunjisuan'@'192.168.200.%' identified by '123123';
replication slave==>mysql同步的必须权限,与root类似
③刷新==>flush privileges;
④对主库锁表只读==>flush table with read lock;(手动解锁==>unlock tables;)
⑤对主库做全备,并推送到从库中,使主从数据一致
⑥查看show master status;==>告诉从库验证信息
从库:①打开my.cnf配置文件,开启中继日志(relay-log),server id=3(不能与主库一致)
②输入验证信息:例
CHANGE.MASTER TO MASTER_HOST='192.168.200.127',MASTER_PORT=3306,MASTER_USER='yunjisuan',MASTER_PASSWORD='123123',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=580
③激活主从同步==>start slave; 关闭主从同步==>stop slave;
④查看从库状态==>show slave statusG (有双yes代表成功)
master.into(IO线程记录的数据)==>记录验证信息和二进制文件位置信息
relay-log.info(SQL线程记录数据)
从库永久只读:在my.cnf配置文件[mysql]模块里加入read-only
SQL线程宕了,跳过执行一次==>set global sql_slave_skip_counter=1;