当前位置: 首页 > 编程日记 > 正文

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、客户端连接器

  1. Connectors,客户端连接器,支持主流开发语言的连接。

1.2、连接层

  1. Connection Pool,连接池:身份认证、连接数、线程重用,提升并发性能。
  2. Management Services & Utilities,管理工具:备份、恢复、安全、集群等。
  3. SQL Interface,SQL接口:接收DML、DDL等SQL语句,并将结果返回给用户。
  4. Parser,解析器:解析SQL语句,进行语法检查,生成解析树。
  5. Optimizer,优化器:解析树优化生成执行计划。
  6. Caches & Buffers,缓存:表、记录、引擎等缓存,提升性能。

1.3、可插拔存储引擎

  1. Pluggable Storage Engines,存储引擎:MyISAM、InnoDB等不同存储引擎。可插拔替换。

1.4、文件系统与文件

  1. 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&#xff1a;已知4组&#xff08;默认&#xff09;3D-2D匹配点&#xff0c;构建参考点&#xff0c;通过计算参考点的相机坐标&#xff0c;线性组合成路标点的相机坐标。然后使用ICP估计相机间的位姿变换。   需要注意的事&#xff0c;EPNP可以同时使用N组路标点构建M矩阵…

iOS开发UI篇—多控制器和导航控制器简单介绍

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

值传递 和 地址传递 的区别(好多句话才可以说清)

要知道什么是**值传递**和**地址传递**&#xff0c;首先要知道什么是**基本数据类型**和**引用类型**。 Java的基本数据类型就八种&#xff08;除了这八种之外都是引用类型&#xff09;&#xff1a;◆整型&#xff1a;byte(8位) short(16位) int(32位) long(64位)&#xff1…

日期类的时间从为什么是从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系统&#xff0c;而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 今天&#xff0c;贫僧的个人博客…

50个顶级开源营销应用程序

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

C++乘法的int越界问题

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

C# DataSet与DataTable的区别和用法

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

Java代码块总结(速读版)

**代码块必须直接定义在类中**&#xff0c;有两种&#xff1a;静态代码块 和 非静态代码块 静态代码块是在类&#xff08;class文件&#xff09;加载内存时执行&#xff0c;而非静态代码块是在创建对象&#xff08;new 类名();&#xff09;时执行。public class Test{static{ …

matplotlib01-plot折线图、scatter散点图

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

C++const关键字作用

修饰普通变量&#xff0c;表示不可修改&#xff08;在定义的时候必须初始化&#xff09; #include <iostream> using namespace std; const int a1 10; int main() {const int a3; // 错误&#xff0c;没有初始化const int a2 10;a1 10; // 错误&#xff0c;不可修…

系统设计规范化攻克了什么问题

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

五分钟让你了解 Java方法(或者叫函数)

Java方法&#xff08;函数&#xff09;的形式如下&#xff1a; 访问权限 [修饰符] 返回值类型 方法名([参数列表]){方法体 } 访问权限&#xff1a;控制方法(函数)能否在其他“类”中使用有public(可以在其他类中使用)&#xff0c;protected&#xff0c;private(只能在该类中使用…

Bootstrap笔记

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

Apache2.4.x下proxy_module、proxy_fcgi_module结合PHP-FPM解决内存不足问题

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

两分钟让你知道什么是“Java重载”

重载&#xff1a;顾名思义&#xff0c;就是重复负载的意思&#xff0c;具体到Java 就是方法名相同&#xff08;重复使用&#xff09;&#xff0c;但参数列表不同。 我们通过几个Java方法来具体说明&#xff1a;public class Addition{public int add(int a, int b){return ab;}…

C++ static

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

TCO 2015 1A Hard.Revmatching(Hall定理)

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

20169211 2016-2017-2 《移动平台开发实践》 第十周实验总结

实验一&#xff1a;简易计算器 实验要求 实现一个简易计算器Calc,支持 - * / 和%运算, 从命令行传入计算数据&#xff0c;比如&#xff1a;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、重定向 三、迁移 庚子鼠年最后几天&#xff0c;贫僧发现了内存不足的问题&#xff0c;并在Apache2.4.x下proxy_module、proxy_fcgi_module结合PHP-FPM解决内存不足问题一文中阐述了解决方案。…

zabbix4.0搭建(基于CentOS6.8)

环境服务端&#xff1a;188.188.3.241&#xff0c;系统&#xff1a;centos6.8&#xff0c;mysql&#xff1a;5.7.3&#xff0c;php&#xff1a;5.4.9&#xff0c;nginx&#xff1a;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++ 回调函数

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

想知道什么是“成员变量”吗?

成员变量是直接定义在“类”中的量&#xff1b; 特点&#xff1a;成员变量有默认值,具体请看表格 数据类型默认值整型0浮点型0.0char’ ’booleanfalse其他类型null 成员变量的作用就是可以详细描述对象信息 我们来举个例子&#xff1a; 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 调用编译&#xff0c;选择:catkin_make:build 可以点击配置&#xff08;右边的小齿轮&#xff09;&#xff0c;修改.vscode/tasks.json 文件 { // 有关 tasks.j…

从Excel中导入数据时,提示“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决办法...

注意&#xff0c;64位系统&#xff0c;用64位的补丁文件; https://www.cnblogs.com/A2008A/articles/2438962.html 操作系统&#xff1a;使用的是64位的Windows Server 2008 解决办法&#xff1a; 这是由于该计算机上没有安装Microsoft Access数据库引擎组件&#xff0c;该组件…

天兔(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…

五分钟让你搞懂什么是“构造方法”

构造方法的形式&#xff1a;类名([参数列表]){} 特点&#xff1a;- 构造方法没有返回值&#xff0c;就算void也不能有&#xff0c;这点与Java方法(或叫函数)不一样&#xff1b;- 一个类中默认无参构造方法&#xff0c;但是当定义了一个有参构造方法时&#xff0c;则默认无参构造…

Linux10-归档、系统间复制文件

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