MySQL数据库文件DBEngineer

本文档从MySQL数据库和存储引擎层面介绍各种类型的文件。

在MySQL实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数。在默认情况下,MySQL实例会按照一定的顺序在指定的位置进行读取。

#mysql--help|grepmy.cnf.../etc/my.cnf/etc/mysql/my.cnf/usr/local/mysql/etc/my.cnf~/.my.cnf

如果想指定默认的参数文件,需要配合--defaults-file选项,如:

mysqld--defaults-file=/etc/my3306.cnf&

下面介绍一下常见参数文件/etc/my.cnf中的参数的含义。

最好是添加适当的索引而不是纯粹加大join_buffer_size任何两个表间的全表join就会分配一次join_buffer也就是说,如果3个表join就会分配2次joinbuffer(而不是一个session只分配一次)

在SSD存储上应设置为0(禁用),因为使用顺序IO没有任何性能收益.在使用RAID的某些硬件上也应该禁用此设置,因为逻辑上连续的块在物理磁盘上并不能保证也是连续的.

错误日志文件对MySQL的启动、运行、关闭过程进行了记录。

下面示例是一个根据错误日志来处理步骤。

示例准备

1).在MySQL数据目录手动创建mydir目录,并更改为属主为mysql#cd/data/mysql/mysql3306/data#mkdirmydir#chownmysql:mysql

2).登陆mysql,使用命令showdatabases可以看到mydir。mysql>showdatabases;+--------------------+|Database|+--------------------+...|mydir|+--------------------+13rowsinset(0.00sec)

3).在mydir数据库中,创建表t1mysql>usemydirmysql>createtablet1(c1int);

4).删除datadir中的mydir目录#cd/data/mysql/mysql3306/data#rm-rfmydir

5).重启MySQL根据错误日志,来处理数据库错误

2).错误日志中提示找不到/mydir/t1.ibd表,mydir目录不存在了。mysql>SELECT*FROMINFORMATION_SCHEMA.INNODB_SYS_TABLESWHERENAMELIKE'%t1%';+----------+-----------------+------+--------+-------+-------------+------------+---------------+------------+|TABLE_ID|NAME|FLAG|N_COLS|SPACE|FILE_FORMAT|ROW_FORMAT|ZIP_PAGE_SIZE|SPACE_TYPE|+----------+-----------------+------+--------+-------+-------------+------------+---------------+------------+|196|mydir/t1|33|4|326|Barracuda|Dynamic|0|Single||155|sbtest/sbtest1|33|7|280|Barracuda|Dynamic|0|Single||160|sbtest/sbtest10|33|7|285|Barracuda|Dynamic|0|Single||120|test/t11|33|6|229|Barracuda|Dynamic|0|Single||121|test/t12|33|5|230|Barracuda|Dynamic|0|Single|+----------+-----------------+------+--------+-------+-------------+------------+---------------+------------+5rowsinset(0.00sec)

3).查看mydir的表结构mysql>SELECTa.NAME,->b.nameAScol_name,->CASE->WHENb.MTYPE=1THEN'VARCHAR'->WHENb.MTYPE=2THEN'CHAR'->WHENb.MTYPE=3THEN'FIXBINARY'->WHENb.MTYPE=4THEN'BINARY'->WHENb.MTYPE=5THEN'BLOB'->WHENb.MTYPE=6THEN'int'->WHENb.MTYPE=7THEN'SYS_CHILD'->WHENb.MTYPE=8THEN'SYS'->WHENb.MTYPE=9THEN'FLOAT'->WHENb.MTYPE=10THEN'DOUBLE'->WHENb.MTYPE=11THEN'DECIMAL'->WHENb.MTYPE=12THEN'VARMYSQL'->WHENb.MTYPE=13THEN'MYSQL'->WHENb.MTYPE=14THEN'GEOMETRY'->ELSEMTYPE->END->ASType->FROMINNODB_SYS_TABLESa->JOININNODB_SYS_COLUMNSbONa.TABLE_ID=b.TABLE_ID->WHEREa.NAME='mydir/t1';+----------+----------+------+|NAME|col_name|Type|+----------+----------+------+|mydir/t1|c1|int|+----------+----------+------+1rowinset(0.01sec)

4).在test库中,创建同样表结构的t1表。mysql>createtablet1(c1int);

5).在datadir目录创建mydir目录,并且把test目录中的t1.frm复制到mydir目录中#mkdir/data/mysql/mysql3306/data/mydir#cp/data/mysql/mysql3306/data/test/t1.frm/data/mysql/mysql3306/data/mydir#chown-Rmysql:mysql/data/mysql/mysql3306/data/mydir

6).删除mydir数据库mysql>dropdatabasemydir;

7).重新查询mysql>SELECTa.NAME,->b.nameAScol_name,->CASE->WHENb.MTYPE=1THEN'VARCHAR'->WHENb.MTYPE=2THEN'CHAR'->WHENb.MTYPE=3THEN'FIXBINARY'->WHENb.MTYPE=4THEN'BINARY'->WHENb.MTYPE=5THEN'BLOB'->WHENb.MTYPE=6THEN'int'->WHENb.MTYPE=7THEN'SYS_CHILD'->WHENb.MTYPE=8THEN'SYS'->WHENb.MTYPE=9THEN'FLOAT'->WHENb.MTYPE=10THEN'DOUBLE'->WHENb.MTYPE=11THEN'DECIMAL'->WHENb.MTYPE=12THEN'VARMYSQL'->WHENb.MTYPE=13THEN'MYSQL'->WHENb.MTYPE=14THEN'GEOMETRY'->ELSEMTYPE->END->ASType->FROMINNODB_SYS_TABLESa->JOININNODB_SYS_COLUMNSbONa.TABLE_ID=b.TABLE_ID->WHEREa.NAME='mydir/t1';Emptyset(0.01sec)

二进制日志的主要作用:

mysql>select@@gtid_mode;+-------------+|@@gtid_mode|+-------------+|ON|+-------------+1rowinset(0.00sec)mysql>usetest;Databasechangedmysql>createtablepitr(namevarchar(30),birthdaytimestamp);QueryOK,0rowsaffected(0.07sec)mysql>insertintopitrvalues('张三',sysdate());QueryOK,1rowaffected(0.02sec)mysql>insertintopitrvalues('李四',sysdate());QueryOK,1rowaffected(0.02sec)mysql>select*frompitr;+--------+---------------------+|name|birthday|+--------+---------------------+|张三|2018-08-2713:00:05||李四|2018-08-2713:00:14|+--------+---------------------+2rowsinset(0.00sec)

误删除数据'李四',并插入数据'王五',删除表pitr

mysql>deletefrompitrwherename='李四';QueryOK,1rowaffected(0.01sec)mysql>insertintopitrvalues('王五',sysdate());QueryOK,1rowaffected(0.01sec)mysql>select*frompitr;+--------+---------------------+|name|birthday|+--------+---------------------+|张三|2018-08-2713:00:05||王五|2018-08-2713:00:55|+--------+---------------------+2rowsinset(0.00sec)

恢复pitr表中三条数据。

#mysqlbinlog--no-defaults--stop-position='1072'/data/mysql/mysql3306/logs/my3306_binlog.000002|mysql-S/tmp/mysql3306.sock#mysqlbinlog--no-defaults--start-position='1398'--stop-position='1739'/data/mysql/mysql3306/logs/my3306_binlog.000002|mysql-S/tmp/mysql3306.sockmysql>usetest;Databasechangedmysql>select*frompitr;ERROR1146(42S02):Table'test.pitr'doesn'texist

并没有恢复。。。是不是缺了什么步骤,理下思路,是不是binlog里的gtid小于当前的gtid,然后恢复的时候就跳过了。为了确认自己想法的正确性,动手操作吧。1).备份当前binlog#cpmy3306_binlog.000002../2).重置gtidmysql>resetmaster;QueryOK,0rowsaffected(0.05sec)3).重新恢复#mysqlbinlog--no-defaults--stop-position='1072'/data/mysql/mysql3306/my3306_binlog.000002|mysql-S/tmp/mysql3306.sock#mysqlbinlog--no-defaults--start-position='1398'--stop-position='1739'/data/mysql/mysql3306/my3306_binlog.000002|mysql-S/tmp/mysql3306.sock4).重新查询mysql>select*frompitr;+--------+---------------------+|name|birthday|+--------+---------------------+|张三|2018-08-2713:00:05||李四|2018-08-2713:00:14||王五|2018-08-2713:00:55|+--------+---------------------+3rowsinset(0.00sec)恢复成功

下面尝试变更gtid模式能不能恢复

不要在输出中显示任何GTID。从一个或多个包含GTID的二进制日志写入转储文件时需要这样做,如下例所示:

#mysqlbinlog--no-defaults--skip-gtids--stop-position='1106'/data/mysql/mysql3306/logs/my3306_binlog.000019|mysql-S/tmp/mysql3306.sock也能恢复数据。

使用mysqlbinlog命令,实现基于位置的恢复操作

通过mysqldumpslow工具可以查看慢查询日志,如:

#mysqldumpslow-sal-n10/data/mysql/mysql3306/slow.logReadingmysqlslowquerylogfrom/data/mysql/mysql3306/slow.logCount:1Time=0.18s(0s)Lock=0.41s(0s)Rows=1.0(1),root[root]@localhostselect*fromschema_auto_increment_columnsCount:1Time=0.00s(0s)Lock=0.09s(0s)Rows=8.0(8),root[root]@localhostSELECTSUBSTRING_INDEX(event_name,'S',N)AScode_area,sys.format_bytes(SUM(current_alloc))AScurrent_allocFROMsys.x$memory_global_by_current_bytesGROUPBYSUBSTRING_INDEX(event_name,'S',N)ORDERBYSUM(current_alloc)DESC...

下面介绍利用percona-toolkit工具,查看慢查询日志。

1)解压percona-toolkit工具包

#tar-zxvfpercona-toolkit-3.0.11_x86_64.tar.gz

2)添加至环境变量中

#echo"exportPATH=$PATH:/opt/percona-toolkit-3.0.11/bin">>/etc/profile#source/etc/profile

3)分析slowlog

#pt-query-digest/data/mysql/mysql3306/slow.logCan'tlocateData/Dumper.pmin@INC(@INCcontains:/usr/local/lib64/perl5/usr/local/share/perl5/usr/lib64/perl5/vendor_perl/usr/share/perl5/vendor_perl/usr/lib64/perl5/usr/share/perl5.)at/opt/percona-toolkit-3.0.11/bin/pt-query-digestline75.BEGINfailed--compilationabortedat/opt/percona-toolkit-3.0.11/bin/pt-query-digestline75.

又提示缺包。。#yum-yinstallperl-Digest-MD5

generallog会记录MySQL数据库所有操作的SQL语句,包含select和show。默认情况下,禁用常规查询日志。

数据库审计能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断。

它通过对用户访问数据库行为的记录、分析和汇报,用来帮助用户事后生成合规报告,事故追根溯源,同时加强内外部数据库网络行为记录,提高数据资产安全。

MySQL数据库官方的收费组件需要购买企业版才可以使用审计功能。下面利用第三方开源审计插件完成审计工作。

2).解压#unzipdownload_file\file_path\=audit-plugin-mysql-5.7-1.1.6-784-linux-x86_64.zip

3).复制插件至MySQLlib库目录下#cdaudit-plugin-mysql-5.7-1.1.6-784/#lsCOPYINGlibplugin-name.txtREADME.txtTHIRDPARTY.txtutils#cdlib/#lslibaudit_plugin.so#cplibaudit_plugin.so/usr/local/mysql/lib/plugin/

4).安装插件mysql>installpluginauditsoname'libaudit_plugin.so';ERROR29(HY000):File'mysqld'notfound(Errcode:2-Nosuchfileordirectory)

5).查看错误日志#tail-100ferror.log2018-08-27T12:53:17.364957Z8[Note]McAfeeAuditPlugin:setup_offsetsaudit_offsets:(null)validate_checksum:1offsets_by_version:12018-08-27T12:53:17.364977Z8[ERROR]McAfeeAuditPlugin:Failedfileopen:[mysqld],errno:2.Retryingwith/proc/2193/exe.2018-08-27T12:53:20.765251Z8[Note]McAfeeAuditPlugin:mysqld:mysqld(630d78960dfa79b5da11bfbec180899a)2018-08-27T12:53:20.765280Z8[Note]McAfeeAuditPlugin:Couldn'tfindproperTHDoffsetsfor:5.7.23-log2018-08-27T12:53:20.765284Z8[ERROR]Plugin'AUDIT'initfunctionreturnederror.2018-08-27T12:53:20.765287Z8[ERROR]Plugin'AUDIT'registrationasaAUDITfailed.

6).设置偏移量#cdaudit-plugin-mysql-5.7-1.1.6-784/utils#shoffset-extract.sh/usr/local/mysql/bin/mysqld//offsetsfor:/usr/local/mysql/bin/mysqld(5.7.23){"5.7.23","630d78960dfa79b5da11bfbec180899a",7824,7872,3632,4792,456,360,0,32,64,160,536,7988,4360,3648,3656,3660,6072,2072,8,7056,7096,7080,13464,148,672},编辑my3306.cnf文件,添加以下内容。重启mysql#vi/etc/my3306.cnfplugin-load=AUDIT=libaudit_plugin.soaudit_json_file=ONaudit_offsets=7824,7872,3632,4792,456,360,0,32,64,160,536,7988,4360,3648,3656,3660,6072,2072,8,7056,7096,7080,13464,148,672audit_json_log_file=/data/mysql/mysql3306/mysql3306_audit.log

7).插件已成功安装root@localhost[(none)]21:32:22>showplugins;+----------------------------+----------+--------------------+--------------------+---------+|Name|Status|Type|Library|License|+----------------------------+----------+--------------------+--------------------+---------+...|AUDIT|ACTIVE|AUDIT|libaudit_plugin.so|GPL|+----------------------------+----------+--------------------+--------------------+---------+

需要关心的参数7.中继日志主从复制中,slave服务器上一个很重要的文件。

复制的工作原理分为以下3个步骤:

当MySQL实例启动时,会将自己的进程ID写入一个文件中——该文件即为pid文件。该文件由参数pid_file控制,默认位于数据库目录下,文件名为主机名.pid

mysql>showvariableslike'%pid_file%';+---------------+--------------+|Variable_name|Value|+---------------+--------------+|pid_file|mysqldb1.pid|+---------------+--------------+1rowinset(0.00sec)

在UNIX系统下本地连接MySQL可以采用UNIX域套接字方式,这种方式需要一个套接字(socket)文件。

由参数socket控制:

mysql>showvariableslike'socket';+---------------+---------------------+|Variable_name|Value|+---------------+---------------------+|socket|/tmp/mysql3306.sock|+---------------+---------------------+1rowinset(0.00sec)

MySQL数据的存储是根据表进行的,每个表都会有与之对应的文件。但不论采用何种存储引擎,MySQL都有一个以frm为后缀名的文件,这个文件记录了该表的表结构定义。

frm可以存放视图的定义,存放视图定义的frm文件是文本文件,可以直接用cat查看,例如:

#catGLOBAL_STATUS.frmTYPE=VIEWquery=select`information_schema`.`GLOBAL_STATUS`.`VARIABLE_NAME`AS`VARIABLE_NAME`,`information_schema`.`GLOBAL_STATUS`.`VARIABLE_VALUE`AS`VARIABLE_VALUE`from`INFORMATION_SCHEMA`.`GLOBAL_STATUS`md5=dac896d268861732d0c40425f1e66cc6updatable=0algorithm=0definer_user=rootdefiner_host=localhostsuid=0with_check_option=0timestamp=2018-08-2006:29:43create-version=1source=SELECT*FROM`INFORMATION_SCHEMA`.`GLOBAL_STATUS`client_cs_name=utf8connection_cl_name=utf8_general_ciview_body_utf8=select`information_schema`.`GLOBAL_STATUS`.`VARIABLE_NAME`AS`VARIABLE_NAME`,`information_schema`.`GLOBAL_STATUS`.`VARIABLE_VALUE`AS`VARIABLE_VALUE`from`INFORMATION_SCHEMA`.`GLOBAL_STATUS`

THE END
1.问个伤害显示插件NGA玩家社区在抖音刷到的,就是图片里右上角这个伤害数字显示是什么插件? https://bbs.nga.cn/read.php?tid=43110888
2.UE5GASRPGCharacterClasses我们将使用枚举去定义敌人的类型并创建一个ECharacterClass,并创建一个DataAsset命名为UCharacterClassInfo用来设置每种类型使用的属性初始化的GE。对于随着等级变动的基础属性,我们将使用曲线表格去生成所有等级的数据。并且,在数据中,我们去设置敌人需要附带的技能。 https://blog.csdn.net/2302_79025454/article/details/145324671
3.PostgreSQL数据库最强大的信息收集工具—pgprofile(character varying,integer) function profile.keep_baseline(name,character varying,integer) function profile.mark_pg_stat_statements(integer,integer,integer) function profile.profile_checkavail_cluster_stats_reset(integer,integer,integer) function profile.profile_checkavail_dbstats_reset(integer,integer,https://blog.51cto.com/u_15627009/11386186
4.方舟进化生存控制台介绍游戏问答ForceTame 强制驯化恐龙,需要对准想要驯化的恐龙输入指令 https://www.9game.cn/wenda/466976.html
5.SteamVRPlugin1.0.8/1.1.0/1.1.1/1.2.0./1.2.1/1.2.2/1.2.3所需: 43积分/C币 立即下载 Vudu目录「Vudu Catalog」-crx插件 创建您拥有的电影列表这个插件将在D4WStatsLittle V1.12.0 For Adobe Dreamweaver 35. Date Insertion V1.4.2 For Adobe Dreamweaver Telephone Character V1.6.0 For Adobe Dreamweaver 220. Template Report V1.0.0 For Adobe https://www.iteye.com/resource/a366191027-10955341
6.Maincharacterbuilds3 Haste, Resist Energy (C), Mastery of Flesh, Power from Death, Greater Magic Weapon, DisplacementStats will still work as it adds cons to max dex instead of dex and half armor ac to ac.I tried a Shifter build using the character creation of Inevitable Excess. The Trickster Religiohttps://www.neoseeker.com/pathfinder-wrath-of-the-righteous/builds/Main_Character
7.WoWTools/Plus/Texture.luaat389361a940328289a48d742a2a508bdb(CharacterFrameInsetRight.Bg) set_ScrollBar(ReputationFrame) set_ScrollBar(TokenFrame) set_Alpha_Color(CharacterStatsPane.ClassBackground, nil, nil, min03) set_Alpha_Color(CharacterStatsPane.EnhancementsCategory.Background) set_Alpha_Color(CharacterStatsPane.AttributesCategory.Background) set_Alpha_https://github.com/husandro/WoWTools/blob/389361a940328289a48d742a2a508bdb83b657ef/Plus/Texture.lua
8.gameinvirtualrealitywithanautonomouscharacterJ.L. conceived the experiment, analysed the data, interpreted the results and wrote the manuscript, V.J. implemented the virtual environment and conducted the experiment, C.C. helped design the computational model for the animated character and contributed to the data analysis, C.C. interpreted https://www.nature.com/articles/s41598-022-25197-z
9.statsstatgennch[php中文手册]在线原生手册php中文网为您准备了php中文手册,在线手册阅读,让您快速了解php中文手册,本章节为php中文手册的stats_stat_gennch部分https://m.php.cn/manual/view/7051.html
10.R语言网页数据爬取rvest包学习#加载所需的包 library("rvest"); library("dplyr"); library("stringr"); #批量爬取豆瓣图书top250数据 ind <-c(0,25,50,75,100,125,150,175,200,225) book_inf <-data.frame() #使用for循环进行批量数据爬取(发现url的规律,写for循环语句) for (i in1:length(ind)){ web<-read_html(str_https://www.jianshu.com/p/c0212853b285
11.云数据库GaussDB8.102主备版Mgaussdb=# \c m_db Non-SSL connection (SSL connection is recommended when requiring high-securityconnection.set_character_set(charset, collation=None)文档版本 01 (2024-04-30) 版权所有 ? 华为https://support.huawei.com/enterprise/zh/doc/EDOC1100368856?section=k005
12.xxzzyy'sProfileAll Anime Stats Anime Stats Days: 38.7 Mean Score: 7.83 Watching12 Completed102 On-Hold3 DroppedCharacter (8) Break, Xerxes Pandora Hearts Sagara, Sousuke Full Metal Panic! Araragi, Koyomi :: C.C.O. Official Newsletter:: Hey there everyone! How are you doing We are writing https://myanimelist.net/profile/xxzzyy
13.手把手教你安装MySQLInnoDBCluster8.0.3400'character_set_server = utf8mb4explicit_defaults_for_timestamp = 1autocommit = 1transaction_isolation = READ-COMMITTEDsecure_file_priv = "/1innodb_stats_persistent_sample_pages = 64innodb_autoinc_lock_mode = 2innodb_online_alter_log_max_size = 1Ginnodb_open_files = 4096innodb_https://blog.itpub.net/69968215/viewspace-3010510/