Closed pengjunlong closed 6 years ago
日志文件
错误日志默认放在数据文件目录下,可以通过--log-error=file_name 修改路径
binlog会将所有修改数据库的query语句记录,另外也会记录执行时间、消耗资源、相关事务信息; --log-bin=file_name指定binlog存储位置,--binlog-ignore-db=db_name和--binlog-do-db=db_name中db_name匹配的是执行语句时所处的数据库而不是SQL影响的数据库 mysqlbin.index为所有binlog存储位置的索引文件
数据文件
所有存储引擎都有.frm文件,存储表结构定义信息 .MYD文件,.MYI文件,MyISAM引擎专用 .ibd文件(独享表空间),ibdata文件(共享表空间),InnoDB引擎专用
主从复制文件
从库用master.info维护主库相关信息 从库I/O线程从主库读取binlog后存入mysql-relay-bin.xxxxxn,然后SQL线程从该文件读取解析出SQL语句,在从库应用 mysql-relay-bin.index存储所有relaylog存储位置的绝对路径 relay-log.info文件维护I/O线程写入相关信息
系统配置文件 一般都在my.cnf,由参数组组成,组名用[]表示,如[mysqld],[client]
Unix/Linux特有: pid文件存储mysqld进程id socket文件,客户端可以通过Unix socket而不用TCP/IP连接MySQL
MySQL server可以看成两层:SQL layer和storage engine layer
启动MySQL:初始化模块 -> 连接管理模块 ,准备好接受客户端请求 客户端连接:连接管理模块 -> cs协议模块 -> 线程管理模块 -> 连接线程模块 -> 用户模块 请求query: 两种类型客户端请求:query和command,query需要调用query解析和转发模块; 连接线程模块 -> query解析和转发模块(直接处理or转发) -> 被转发模块先调用访问控制模块 -> 表管理器模块 -> 存储引擎接口模块 -> 具体存储引擎处理 -> 处理完成,控制权交回连接线程模块
返回结果:query或command处理成功或失败,处理结果或错误信息通过连接线程反馈给客户端,然后连接线程模块进行相应清理工作,继续等待后续请求 退出:连接线程模块处理客户端断开连接的请求
上面过程中数据发生变化&打开了bin-log功能,则调用日志处理模块 各模块核心运算处理功能高度依赖核心API模块
mysql自带工具物尽其用~
mysql -uroot -e "show databases;" “-E, --vertical”全程有以”\G“结尾的效果 “-H, --html”与“-X, --xml”,顾名思义 mysql -uroot --prompt="\u@\h : \d \r:\m:\s> " mysql -uroot --tee=/tmp/mysqllog,全程记录输入和输出到文件 “-U, --safe-updates”(禁用所有无法用索引的update、delete)、“--select_limit=#”(和-U一起使用,限制查询记录数)和“--max_join_size=#”(和-U一起使用,限制参与join记录数) “--show-warnings”每次query后自动执行”show warnings“展示最后一次warning
上面常用参数可以写到my.cnf中[mysql]、[client]下,这样不用每次手动加了
mysqladmin -uroot -hlocalhost ping,检查指定server是否能正常提供服务 mysqladmin -uroot status,返回server一些基本状态 mysqladmin -uroot processlist,数据库当前连接线程信息,类似”show processlist“ start slave、stop slave命令维护主从复制,kill命令终止某个连接到server的线程
mysqldump -uroot --no-data --default-character-set=utf8 test t1 以query语句方式导出test库t1表,--no-data指定不导出数据(只有结构)