本文主要是介绍Mysql从小白到大神,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、,mysql InnoDB引擎 底层存储结构
index page:存放mysql的所有数据
date dictionary:数据字典(当我们PDL操作时);
lock info:行锁(当update1000w行记录时候要分1000w个行锁,很影响性能,所以避免行锁。但是在mysql中行锁达到一定量的话会自动升级为表锁)
undo page:缓存(当我们每次做修改时候,都要先把缓存放到undo中,在进行修改操作) , 当然缓存也有定期的清理
insert buffer page:缓存二级索引也叫辅助索引
adaptive hash index:hash索引
目前通用的几种算法:
1、遍历 2、二分法 3、二叉树 4、hash hash是最快的
additional Memory Pool : 存放日志(线程写到日志文件)
double write: 双写(当我们insert 时候 先到 index page 拿到数据 然后写到磁盘)
这里有个问题:我们知道index page 块中 每个page块的大小是16k 现在我们要往磁盘中写数据写到8k的时候断掉了 mysql如何处理? 这个时候表示 page 不完整了, 那么应该如何处理呢 首先mysql提供一个刷脏块的线程 用来轮训出脏page数据(也就是写磁盘写一半的问题) 这部分数据会走另一条线 来写入磁盘,首先通过double write 写入 double write segment 然后在写入磁盘
MYSQL查看数据文件
show variables like '%datadir%
MYSQL查看日志命令
show variables like '%log%
进入mysql命令
mysql -hlocalhost -uroot -p
-h数据库主机
-u用户
-p密码
InnoDB逻辑存储结构
1、区是最小单位,一个区由64个page组成,page(叶子),大小为16k,叶子下面是row(行)
二、mysql的基本操作
1、操作表(当删除一张表 mysql都做了哪些操作)
show tables; //先看表
show processlist; //看看表是否有访问
rename table 表 to 新表; //赋值一个表
delete from 表; //删除表
2、线上迁移mysql数据
当线上多个mysql服务器之间需要数据迁移时候的处理方式
1、在新的服务器中创建mysql并启动同时创建一张表
2、更改表的server_id不要和被迁移的表一样即可
操作命令:show variables like '%server_id%'
3、在新服务备份(通过dump备份)
操作命令: mysqldump --single-transaction --master-date=2 表 -uroot > /tmp/备份表.sql
4、导入表数据
操作命令:source /tmp/表名
5、自动导入(主从复制)
chang master to
master_host'127.0.0.1', //被复制的表端口
master_port=3306, //端口
master_user='repl', //账号
master_password='password',//密码
master_log_file='', //biglog日志名
master_log_pos='', //日志位置
ok这样的话就通过日志文件将主表的数据实时导入到子表中。
Mysql备份
操作命令: mysqldump --single-transaction --master-date=2 数据库名称 -uroot > /tmp/备份表.sql
这篇关于Mysql从小白到大神的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!