MySQL00-这都不知道还TM学啥MySQL
目录
一、MySQL架构概述
1.1、客户端连接器
1.2、连接层
1.3、可插拔存储引擎
1.4、文件系统与文件
二、配置文件
三、数据文件
四、日志文件(以MySQL5.7.32为例)
4.1、错误日志 Error Log
4.2、一般查询日志 General Query Log
4.3、二进制日志 Bin Log
4.4、慢查询日志 Slow Query Log
4.5、Undo Log日志
4.6、Redo Log日志
五、备份与恢复
5.1、使用mysqlbinlog + bin log恢复
5.2、使用mysqldump备份与恢复
一、MySQL架构概述
1.1、客户端连接器
- Connectors,客户端连接器,支持主流开发语言的连接。
1.2、连接层
- Connection Pool,连接池:身份认证、连接数、线程重用,提升并发性能。
- Management Services & Utilities,管理工具:备份、恢复、安全、集群等。
- SQL Interface,SQL接口:接收DML、DDL等SQL语句,并将结果返回给用户。
- Parser,解析器:解析SQL语句,进行语法检查,生成解析树。
- Optimizer,优化器:解析树优化生成执行计划。
- Caches & Buffers,缓存:表、记录、引擎等缓存,提升性能。
1.3、可插拔存储引擎
- Pluggable Storage Engines,存储引擎:MyISAM、InnoDB等不同存储引擎。可插拔替换。
1.4、文件系统与文件
- FileSystem, Files & Logs,文件系统和文件:日志文件、数据文件、配置文件等。
二、配置文件
数据库配置文件放在/etc/my.cnf,和/etc/my.cnf.d目录里面。
三、数据文件
查看数据文件存放的位置,用datadir参数来查看。数据文件有多种格式,可能根据引擎不同有差异,默认是InnoDB引擎。
mysql> show variables like '%datadir%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)mysql> show variables like '%engine%';
+----------------------------------+--------+
| Variable_name | Value |
+----------------------------------+--------+
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_disk_storage_engine | InnoDB |
+----------------------------------+--------+
4 rows in set (0.00 sec)mysql>
数据文件包括以下几类
- db.opt文件:记录这个库默认使用的字符集和校验规则。
- frm文件:存储与表相关的元数据,包括表结构的定义,不管使用什么引擎每张表都有一个frm文件。
- MYD文件:MyISAM引擎专用,存放MyISAM表的数据,每张表都会有一个.MYD文件。
- MYI文件:MyISAM引擎专用,存放MyISAM表的索引相关信息,每张MyISAM表对应一个.MYI文件。
- ibd文件和ibdata文件:存放InnoDB的数据文件。InnoDB存储引擎有两种表空间方式:独享表空间和共享表空间,独享表空间使用.ibd文件来存储数据和索引,且每张InnoDB表对应一个.ibd文件;共享表空间使用ibdata文件,所有表共同使用一个.ibdata文件。
- ibdata1文件:系统表空间数据文件,存放表元数据、Undo日志等。
- ib_logfile0、ib_logfile1文件:Redo Log日志文件。
验证一下不同引擎的数据文件内容有什么不同,在test_file数据库里面创建dept1和dept2两张表,分别使用MyISAM和InnoDB引擎。
mysql> use test_file
Database changed
mysql> create table dept1(-> deptno int primary key,-> dname varchar(20)-> ) engine = myisam;
Query OK, 0 rows affected (0.01 sec)mysql> create table dept2(-> deptno int primary key,-> dname varchar(20)-> ) engine = innodb;
Query OK, 0 rows affected (0.01 sec)
我们到数据文件目录下查看。
- 数据库test_file有一个db.opt文件,用来记录字符集和校验规则。
- 两张表个有一个frm文件,记录表结构。
- dept1表使用MyISAM引擎,一个.MYD文件记录数据,一个.MYI文件记录索引。
- dept2表使用InnoDB引擎,独立表空间,所以有一个dept2.ibd文件存放数据和索引。
[root@toy ~]# ll /var/lib/mysql/
auto.cnf client-key.pem ib_logfile1 mysql.sock.lock server-cert.pem toy-bin.000001
ca-key.pem ib_buffer_pool ibtmp1 performance_schema/ server-key.pem toy-bin.index
ca.pem ibdata1 mysql/ private_key.pem sys/ wordpress/
client-cert.pem ib_logfile0 mysql.sock public_key.pem test_file/
[root@toy ~]# ll /var/lib/mysql/test_file/
total 128
-rw-r----- 1 mysql mysql 65 Dec 6 19:31 db.opt
-rw-r----- 1 mysql mysql 8596 Dec 6 19:33 dept1.frm
-rw-r----- 1 mysql mysql 0 Dec 6 19:33 dept1.MYD
-rw-r----- 1 mysql mysql 1024 Dec 6 19:33 dept1.MYI
-rw-r----- 1 mysql mysql 8596 Dec 6 19:34 dept2.frm
-rw-r----- 1 mysql mysql 98304 Dec 6 19:34 dept2.ibd
四、日志文件(以MySQL5.7.32为例)
4.1、错误日志 Error Log
默认开启,记录数据库中的错误信息。查看方法为
mysql> show variables like '%log_err%';
+---------------------+---------------------+
| Variable_name | Value |
+---------------------+---------------------+
| binlog_error_action | ABORT_SERVER |
| log_error | /var/log/mysqld.log |
| log_error_verbosity | 3 |
+---------------------+---------------------+
3 rows in set (0.00 sec)mysql>
4.2、一般查询日志 General Query Log
默认关闭,记录一般查询语句。查看方法为
mysql> show variables like '%general_log%';
+------------------+------------------------+
| Variable_name | Value |
+------------------+------------------------+
| general_log | OFF |
| general_log_file | /var/lib/mysql/toy.log |
+------------------+------------------------+
2 rows in set (0.01 sec)mysql>
4.3、二进制日志 Bin Log
记录MySQL数据库执行的更改操作,记录发生时间、执行时长,不记录select、show等不修改数据库的操作。这个日志类是MySQL数据库的机制,和引擎无关,开启以后不管使用什么引擎,MySQL数据库都会写bin log。
show variables like '%log_bin%';是查看二进制日志是否开启以及存放位置。
show variables like '%binlog%';是查看二进制日志的配置情况。
mysql> show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-------+
6 rows in set (0.00 sec)mysql> show variables like '%binlog%';
+--------------------------------------------+----------------------+
| Variable_name | Value |
+--------------------------------------------+----------------------+
| binlog_cache_size | 32768 |
| binlog_checksum | CRC32 |
| binlog_direct_non_transactional_updates | OFF |
| binlog_error_action | ABORT_SERVER |
| binlog_format | ROW |
| binlog_group_commit_sync_delay | 0 |
| binlog_group_commit_sync_no_delay_count | 0 |
| binlog_gtid_simple_recovery | ON |
| binlog_max_flush_queue_time | 0 |
| binlog_order_commits | ON |
| binlog_row_image | FULL |
| binlog_rows_query_log_events | OFF |
| binlog_stmt_cache_size | 32768 |
| binlog_transaction_dependency_history_size | 25000 |
| binlog_transaction_dependency_tracking | COMMIT_ORDER |
| innodb_api_enable_binlog | OFF |
| innodb_locks_unsafe_for_binlog | OFF |
| log_statements_unsafe_for_binlog | ON |
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_size | 1073741824 |
| max_binlog_stmt_cache_size | 18446744073709547520 |
| sync_binlog | 1 |
+--------------------------------------------+----------------------+
22 rows in set (0.00 sec)mysql>
Bin Log类似Oracle的归档日志,写满后再生成新的Bin Log,文件名格式为“<主机名>-bin.<序列号>”,用于数据库的主从复制、数据恢复。Redo Log文件记录有三种模式,主从复制推荐使用ROW模式。
- ROW(row-based replication,RBR)。master端日志会记录每一行数据被修改的情况,然后在slave端对相同数据进行修改。优点:日志记录每一行数据的修改细节,能完全实现数据库的主从复制、数据恢复。缺点:批量操作会产生大量日志,尤其是alter table操作会让日志量暴涨。
- STATEMENT(statement-base replication,SBR)。master端日志会记录每一条修改数据的SQL,slave端复制的时候SQL进程会解析成和原来master端相同的SQL再次执行。优点:日志量小,减少磁盘IO。缺点:不可靠,不适用于主从复制,因为如果master使用了last_insert_id()、now()等函数,slave解析结果和master不一样,会导致数据不一致。
- MIXED(mixed-based replication,MBR)。ROW、STATEMENT混合使用。MySQL根据执行的SQL语句选择ROW、STATEMENT方式。
Bin Log文件记录的是对数据库修改操作,用来表示修改操作的是Log Event,不同的修改操作对应不同的Log Event。具体内容参看数据库手册。
我们前面看到log_bin默认是关闭的,直接开启会报错,开启需要修改配置文件/etc/my.cnf,然后重启数据库。
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set (0.00 sec)mysql> set global log_bin=ON;
ERROR 1238 (HY000): Variable 'log_bin' is a read only variable
根据手册《refman-5.7-en.a4.pdf》 16.1.6.4 Binary Logging Options and Variables 节的描述,通过修改/etc/my.cnf配置文件,加入log-bin,server_id两个选项,开启log_bin、log_bin_basename、log_bin_index三个选项。默认情况,bin log的位置在数据文件目录,文件名是“<主机名>-bin.<序号>”。启用bin log必须指定server_id选项,否则数据库不能启动。通过修改log-bin=<abs_path>,可以指定bin log的位置,名称等。
[root@toy ~]# vim /etc/my.cnf
# bin log
log-bin
server_id=0
[root@toy ~]# systemctl restart mysqld
…………
[root@toy ~]# ll /var/lib/mysql/ | grep bin
-rw-r----- 1 mysql mysql 154 Dec 6 18:51 toy-bin.000001
-rw-r----- 1 mysql mysql 17 Dec 6 18:51 toy-bin.index
开启bin log后,使用show binary logs查看有多少个bin log文件,使用show binlog events查看有哪些事件,使用show binlog events in toy-bin.000001查看指定文件的时间。
mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/toy-bin |
| log_bin_index | /var/lib/mysql/toy-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+------------------------------+
6 rows in set (0.01 sec)mysql> show binary logs;
+----------------+-----------+
| Log_name | File_size |
+----------------+-----------+
| toy-bin.000001 | 154 |
+----------------+-----------+
1 row in set (0.00 sec)mysql>
mysql> show binlog events;
+----------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+----------------+-----+----------------+-----------+-------------+---------------------------------------+
| toy-bin.000001 | 4 | Format_desc | 0 | 123 | Server ver: 5.7.32-log, Binlog ver: 4 |
| toy-bin.000001 | 123 | Previous_gtids | 0 | 154 | |
+----------------+-----+----------------+-----------+-------------+---------------------------------------+
2 rows in set (0.00 sec)mysql>
4.4、慢查询日志 Slow Query Log
执行时间比较长的查询语句执行过程记录在慢查询日志中。
执行时间长用long_query_time参数来设置,默认是10秒钟。
mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------+
| Variable_name | Value |
+---------------------+-----------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/toy-slow.log |
+---------------------+-----------------------------+
2 rows in set (0.00 sec)mysql> show variables like '%long_query_time%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)mysql>
mysql> set long_query_time = 5;
mysql>
mysql> show variables like '%long_query_time%';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
1 row in set (0.00 sec)mysql>
4.5、Undo Log日志
Undo Log实现了事务的原子性,执行rollback语句,可以借助Undo Log日志使数据库库恢复到事务开始前的状态。在事务开始前产生Undo Log,InnoDB会将修改的记录存放到Undo Log日志文件中。在事务提交时,不会立刻删除Undo Log,InnoDB会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread进行回收处理。因此,通过Undo Log回滚数据库状态是以事务计的,不是以时间计的。Undo Log属于逻辑日志,记录一个变化过程。例如执行一个delete,undo log记录一个insert。如果执行一个update,undo log记录一个相反的update。
查看innodb_undo。注意innodb_undo_tablespaces参数默认为0,表示使用系统表空间,也就是记录在ibdata1文件中。如果把这个参数改大,那么会生成用户指定的undo日志文件,undo001、undo002等。
mysql> show variables like '%innodb_undo%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| innodb_undo_directory | ./ |
| innodb_undo_log_truncate | OFF |
| innodb_undo_logs | 128 |
| innodb_undo_tablespaces | 0 |
+--------------------------+-------+
4 rows in set (0.00 sec)mysql>
4.6、Redo Log日志
和Bin Log不同,Redo Log是InnoDB引擎特有的防止数据丢失的机制,这就是前面提到的ib_logfile0和ib_logfile1。
数据发生更改时,不是立即写入磁盘的而是写入缓存的,如果此时发生了宕机,那么这部分非持久化的数据会丢失。为了解决这个问题,InnoDB引擎会把数据更改操作写入Redo Buffer,再通过后台机制写入 Redo Log文件。在下次数据库启动后,非持久化的数据按照Redo Log记录的内容写入数据库,不丢失数据。
Redo Buffer写入Redo Log日志文件的策略就很重要了,如果Redo Buffer没有及时写入,也会丢失数据。通过innodb_log参数,看到Redo Buffer大小是16MB,日志组有2个Redo Log文件,每个文件大小是50MB。通过模糊查询innodb_flush查看innodb_flush_log_at_trx_commit参数,也就是Redo Buffer持久化策略。innodb_flush_log_at_trx_commit有三个可选值0、1、2。
- 0表示后台线程每秒持久化一次,存在丢失1秒数据的风险。
- 1表示提交日志时将Redo Buffer写入OS cache,同时OS cache做持久化,这种方式不丢失数据,也是默认值。
- 2表示提交日志时将Redo Buffer写入OS cache,但是OS cache每秒持久化,还是有丢数据的风险。
mysql> show variables like '%innodb_log%';
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| innodb_log_buffer_size | 16777216 |
| innodb_log_checksums | ON |
| innodb_log_compressed_pages | ON |
| innodb_log_file_size | 50331648 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
| innodb_log_write_ahead_size | 8192 |
+-----------------------------+----------+
7 rows in set (0.00 sec)mysql>
mysql> show variables like '%innodb_flush%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_timeout | 1 |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_flush_method | |
| innodb_flush_neighbors | 1 |
| innodb_flush_sync | ON |
| innodb_flushing_avg_loops | 30 |
+--------------------------------+-------+
6 rows in set (0.00 sec)mysql>
五、备份与恢复
5.1、使用mysqlbinlog + bin log恢复
使用mysqlbinlog + bin log可以恢复数据库,格式如下。
mysqlbinlog --start-position=<start_pos> --stop-position=<stop_pos> <binlogfile> | mysql -u<user> -p
mysqlbinlog --start-datetime=<start_time> --stop-datetime=<stop_time> <binlogfile> | mysql -u<user> -p
现在假设误操作删掉了test_file数据库,马上用mysqlbinlog查看有哪些操作,需要恢复到哪个地方。
mysql> show binlog events;
+----------------+------+----------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+----------------+------+----------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
| toy-bin.000001 | 4 | Format_desc | 0 | 123 | Server ver: 5.7.32-log, Binlog ver: 4 |
| toy-bin.000001 | 123 | Previous_gtids | 0 | 154 | |
| toy-bin.000001 | 154 | Anonymous_Gtid | 0 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| toy-bin.000001 | 219 | Query | 0 | 328 | create database test_file |
| toy-bin.000001 | 328 | Anonymous_Gtid | 0 | 393 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| toy-bin.000001 | 393 | Query | 0 | 556 | use `test_file`; create table dept1(
deptno int primary key,
dname varchar(20)
) engine = myisam |
| toy-bin.000001 | 556 | Anonymous_Gtid | 0 | 621 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| toy-bin.000001 | 621 | Query | 0 | 784 | use `test_file`; create table dept2(
deptno int primary key,
dname varchar(20)
) engine = innodb |
| toy-bin.000001 | 784 | Anonymous_Gtid | 0 | 849 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| toy-bin.000001 | 849 | Query | 0 | 1007 | use `test_file`; create table user( id int primary key, name varchar(20) ) charset = 'utf8' |
| toy-bin.000001 | 1007 | Anonymous_Gtid | 0 | 1072 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| toy-bin.000001 | 1072 | Query | 0 | 1149 | BEGIN |
| toy-bin.000001 | 1149 | Table_map | 0 | 1204 | table_id: 109 (test_file.user) |
| toy-bin.000001 | 1204 | Write_rows | 0 | 1251 | table_id: 109 flags: STMT_END_F |
| toy-bin.000001 | 1251 | Xid | 0 | 1282 | COMMIT /* xid=36 */ |
| toy-bin.000001 | 1282 | Anonymous_Gtid | 0 | 1347 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| toy-bin.000001 | 1347 | Query | 0 | 1424 | BEGIN |
| toy-bin.000001 | 1424 | Table_map | 0 | 1479 | table_id: 109 (test_file.user) |
| toy-bin.000001 | 1479 | Write_rows | 0 | 1523 | table_id: 109 flags: STMT_END_F |
| toy-bin.000001 | 1523 | Xid | 0 | 1554 | COMMIT /* xid=37 */ |
| toy-bin.000001 | 1554 | Anonymous_Gtid | 0 | 1619 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| toy-bin.000001 | 1619 | Query | 0 | 1696 | BEGIN |
| toy-bin.000001 | 1696 | Table_map | 0 | 1751 | table_id: 109 (test_file.user) |
| toy-bin.000001 | 1751 | Update_rows | 0 | 1810 | table_id: 109 flags: STMT_END_F |
| toy-bin.000001 | 1810 | Xid | 0 | 1841 | COMMIT /* xid=39 */ |
| toy-bin.000001 | 1841 | Anonymous_Gtid | 0 | 1906 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| toy-bin.000001 | 1906 | Query | 0 | 1983 | BEGIN |
| toy-bin.000001 | 1983 | Table_map | 0 | 2038 | table_id: 109 (test_file.user) |
| toy-bin.000001 | 2038 | Update_rows | 0 | 2094 | table_id: 109 flags: STMT_END_F |
| toy-bin.000001 | 2094 | Xid | 0 | 2125 | COMMIT /* xid=43 */ |
| toy-bin.000001 | 2125 | Anonymous_Gtid | 0 | 2190 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| toy-bin.000001 | 2190 | Query | 0 | 2297 | drop database test_file |
+----------------+------+----------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
32 rows in set (0.00 sec)mysql>
发现Pos=154开始创建了test_file数据库,Pos=2125删除test_file数据库。因此,恢复的参数--start-position=154,--stop-position=2125。然后管道连接到mysql,指定用户密码,就可以恢复到你想到的状态了。如果是使用时间参数,那么先用mysqlbinlog命令查询到时间,再相应调整命令参数。
[root@toy ~]# mysqlbinlog --start-position=154 --stop-position=2125 /var/lib/mysql/toy-bin.000001 | mysql -uroot -p
Enter password:
[root@toy ~]#
5.2、使用mysqldump备份与恢复
mysqldump -u -p db_name > db_backup.sql
mysql -u -p db_name < db_backup.sql
相关文章:

ORB_SLAM2 PnPSolver
EPNP:已知4组(默认)3D-2D匹配点,构建参考点,通过计算参考点的相机坐标,线性组合成路标点的相机坐标。然后使用ICP估计相机间的位姿变换。 需要注意的事,EPNP可以同时使用N组路标点构建M矩阵…

iOS开发UI篇—多控制器和导航控制器简单介绍
iOS开发UI篇—多控制器和导航控制器简单介绍 一、多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单。当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view时,可以用一个大的view去管理1个或者多个小view,控制器也是如…

值传递 和 地址传递 的区别(好多句话才可以说清)
要知道什么是**值传递**和**地址传递**,首先要知道什么是**基本数据类型**和**引用类型**。 Java的基本数据类型就八种(除了这八种之外都是引用类型):◆整型:byte(8位) short(16位) int(32位) long(64位)࿱…

日期类的时间从为什么是从1970年1月1日(格林威治时间)
I suspect that Java was born and raised on a UNIX system.UNIX considers the epoch (when did time begin) to be midnight, January 1, 1970.是说java起源于UNIX系统,而UNIX认为1970年1月1日0点是时间纪元. 但这依然没很好的解释"为什么",出于好奇&a…

MySQL从5.7.32升级到8.0.22
目录 一、备份与导出数据 二、升级到MySQL-8.0.22同时解决字符集问题 2.1、卸载MySQL-5.7.32 2.2、安装MySQL-8.0.22 2.3、修改配置文件 my.cnf 三、导入数据及配置 3.1、重新创建数据库wordpress 3.2、导入表结构和数据 3.3、启动httpd 今天,贫僧的个人博客…

50个顶级开源营销应用程序
显然,开源营销应用程序占有一席之地。如今,营销部门负责相当大比例的企业应用程序购买和部署决策。事实上,Gartner预测,到2017年,首席营销官(CMO)将比首席信息官(CIO)在I…

C++乘法的int越界问题
在做Leetcode 69. x 的平方根,出现了两种int越界的情况: 整数相乘越界 if(mid * mid < x)这样写的话,mid * mid可能越界,因此可以改为 if(mid < x/mid)整数本身越界 int n_r x;Leetcode给了个例子,x 21474…

C# DataSet与DataTable的区别和用法
DataSet是数据集,DataTable是数据表,DataSet存储多个DataTable。DataSet和DataTable像是专门存储数据的一个容器,在你查询数据库得到一些结果时可以存在里面。 DataSet功能强大有浏览、排序、搜索、过滤、处理分级数据、缓存更改等功能&#…

Java代码块总结(速读版)
**代码块必须直接定义在类中**,有两种:静态代码块 和 非静态代码块 静态代码块是在类(class文件)加载内存时执行,而非静态代码块是在创建对象(new 类名();)时执行。public class Test{static{ …

matplotlib01-plot折线图、scatter散点图
目录 一、plot绘制折线图一般用法 二、scatter绘制散点图一般用法 记录一下数据可视化的python库matplotlib,研究并纪录一下。 matplotlib.pyplot.subplots函数。subplots可以绘制一个或多个图表。返回变量fig表示整张图片,变量ax表示图片中的各个图表…

C++const关键字作用
修饰普通变量,表示不可修改(在定义的时候必须初始化) #include <iostream> using namespace std; const int a1 10; int main() {const int a3; // 错误,没有初始化const int a2 10;a1 10; // 错误,不可修…

系统设计规范化攻克了什么问题
系统设计规范化攻克了什么问题(一) 大家好,今天总结下我从事开发工作这几年里,对于项目规范化的一点想法和感触. 在笔者心里,规范是为了解决这个问题而存在的,某些规范都是为了相应问题而存在的.所以仅仅要是能解决这个问题的文档,声明都是规范. 在某时開始设计系统,带人做系统…

五分钟让你了解 Java方法(或者叫函数)
Java方法(函数)的形式如下: 访问权限 [修饰符] 返回值类型 方法名([参数列表]){方法体 } 访问权限:控制方法(函数)能否在其他“类”中使用有public(可以在其他类中使用),protected,private(只能在该类中使用…

Bootstrap笔记
Bootstrap使用: 下载Bootstrap,用于生产环境的 Bootstrap不需要安装解压文件到任意目录创建index.html,在该页面编写代码页面起始位置添加<link rel"stylesheet" href"解压文件中css/bootstrap.min.css的路径"/>转…

Apache2.4.x下proxy_module、proxy_fcgi_module结合PHP-FPM解决内存不足问题
目录 一、背景 二、问题 三、解决方案 一、背景 最近对贫僧的个人页https://stackoperator.top进行升级,将Apache升级到2.4.46,PHP升级到7.4.15。升级后没啥问题,但是第二天却宕机了。经过查证是内存不足,导致mysql服务宕机了…

两分钟让你知道什么是“Java重载”
重载:顾名思义,就是重复负载的意思,具体到Java 就是方法名相同(重复使用),但参数列表不同。 我们通过几个Java方法来具体说明:public class Addition{public int add(int a, int b){return ab;}…

C++ static
(1)static表示静态变量。局部变量存储在栈区,在{}结束时被释放。而static修饰的变量存储在全局区,在程序结束时被释放。 (2)static修饰的变量在外部文件中无法调用,即使使用extern也无法调用。其…

TCO 2015 1A Hard.Revmatching(Hall定理)
\(Description\) 给定一个\(n\)个点的二分图,每条边有边权。求一个边权最小的边集,使得删除该边集后不存在完备匹配。\(n\leq20\)。 \(Solution\) 设点集为\(S\),与\(S\)中的点相邻的点的并集为\(N(S)\)。 由Hall定理,若存在点集\…

20169211 2016-2017-2 《移动平台开发实践》 第十周实验总结
实验一:简易计算器 实验要求 实现一个简易计算器Calc,支持 - * / 和%运算, 从命令行传入计算数据,比如:java Calc 2 3 结果为 2 3 5 java Calc 8 - 3 结果为 8 - 3 5 java Calc 2 * 3 结果为2 * 3 6 java Calc 10 / 2 结…

wordpress从apache迁移到nginx
目录 一、安装nginx 二、配置文件准备 2.1、进程运行用户 2.2、虚拟主机 2.3、重定向 三、迁移 庚子鼠年最后几天,贫僧发现了内存不足的问题,并在Apache2.4.x下proxy_module、proxy_fcgi_module结合PHP-FPM解决内存不足问题一文中阐述了解决方案。…

zabbix4.0搭建(基于CentOS6.8)
环境服务端:188.188.3.241,系统:centos6.8,mysql:5.7.3,php:5.4.9,nginx:1.12.0一、nginx编译安装NGINX_VERSION1.12.0yum -y install pcre-devel openssl-develcd /usr/…

[Ahoi2008]Meet 紧急集合
1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MBhttp://www.lydsy.com/JudgeOnline/problem.php?id1787Description Input Output Sample Input 6 4 1 2 2 3 2 4 4 5 5 6 4 5 6 6 3 1 2 4 4 6 6 6 Sample Output 5 2 2 5 4 1 6 0 HINT S…

C++ 回调函数
函数指针 函数指针是一种指针,具体来说是:指向函数入口地址的指针。 #include <iostream> using namespace std; double function_t(int val) {return val; } int main() {double (*ptr)(int); // 创建一个函数指针,返回值为doubl…

想知道什么是“成员变量”吗?
成员变量是直接定义在“类”中的量; 特点:成员变量有默认值,具体请看表格 数据类型默认值整型0浮点型0.0char’ ’booleanfalse其他类型null 成员变量的作用就是可以详细描述对象信息 我们来举个例子: public class UserInfo{int age;doubl…

Linux09-网络配置
目录 一、网络配置基础 1.1、网络接口 1.2、设置主机名 二、nmcli配置网络 2.1、配置固定的IP地址等 2.2、连接wifi 三、链路聚合等 一、网络配置基础 1.1、网络接口 先来对比一下RHEL6、RHEL7关于网络接口上的一些差别。 RHEL6 RHEL7 配置文件位置 /etc/sysconfig…

VScode配置ROS环境
创建一个文件夹 使用catkin_make编译工作空间的根目录 使用VScode打开 VScode 中编译 ros 快捷键 ctrl shift B 调用编译,选择:catkin_make:build 可以点击配置(右边的小齿轮),修改.vscode/tasks.json 文件 { // 有关 tasks.j…

从Excel中导入数据时,提示“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决办法...
注意,64位系统,用64位的补丁文件; https://www.cnblogs.com/A2008A/articles/2438962.html 操作系统:使用的是64位的Windows Server 2008 解决办法: 这是由于该计算机上没有安装Microsoft Access数据库引擎组件,该组件…

天兔(Lepus)监控系统慢查询分析平台安装配置
转http://suifu.blog.51cto.com/9167728/1770672 被监控端要安装pt工具 1234[rootHE1~]## yum -y install perl-IO-Socket-SSL[rootHE1~]## yum -y install perl-DBI[rootHE1~]## yum -y install perl-DBD-MySQL[rootHE1~]## yum -y install perl-Time-HiRes[rootHE1~]# tar xv…

五分钟让你搞懂什么是“构造方法”
构造方法的形式:类名([参数列表]){} 特点:- 构造方法没有返回值,就算void也不能有,这点与Java方法(或叫函数)不一样;- 一个类中默认无参构造方法,但是当定义了一个有参构造方法时,则默认无参构造…

Linux10-归档、系统间复制文件
目录 一、tar命令 二、scp、sftp命令 三、rsync命令 一、tar命令 tar命令可以归档文件、目录,提取创建的归档文件,同时进行压缩解压缩。使用tar选项时不需要加-,下面是常用的tar选项。 c,创建一个存档。x,提取一个…