MySQL权限控制及日志管理

news2024/11/16 11:36:52

MySQL权限控制及日志管理
在这里插入图片描述

用户权限管理

创建用户

CREATE USER '用户名'@'IP地址' [ IDENTIFIED BY '密码' ]GRANT SELECT ON *.* TO '用户名'@’IP地址’ IDENTIFIED BY "密码"--创建一个用户名为Usr1 密码为 Usr1.mysql的用户 并授权
CREATE USER 'Usr1'@'192.168.1.128' IDENTIFIED BY "Usr1.mysql";
GRANT ALL ON *.* TO 'Usr1'@'192.168.1.128' IDENTIFIED BY 'Usr1.mysql';

--查看mysql.user表
mysql> SELECT Host,User FROM user WHERE User = 'Usr1';
+---------------+------+
| Host          | User |
+---------------+------+
| 192.168.1.128 | Usr1 |
+---------------+------+

--格式注意
用户名@IP地址 用户只能在改IP下才能访问
用户名@192.168.1.% 用户只能在改IP段下才能访问(通配符%表示任意)
用户名@%.baidu.com 
用户名@% 用户可以再任意IP下访问(默认IP地址为%)

删除用户

DROP USER '用户名'@'IP地址';

DELETE FROM mysql.user WHERE user='用户名' AND host='IP地址'

--删除Usr1
DROP USER 'Usr1'@'192.168.1.128';
--查看表
mysql> SELECT Host,User FROM user ;
+-----------+---------------+
| Host      | User          |
+-----------+---------------+
| %         | root          |
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | rkun18        |
| localhost | root          |
+-----------+---------------+


修改用户

RENAME USER '旧用户名'@'IP地址' TO '新用户名'@'IP地址' ;

--修改rkun18用户让其在192.168.1.网段都可以登录mysql
mysql> RENAME USER 'rkun18'@'localhost' TO 'rkun18'@'192.168.1.%';

mysql> SELECT Host,User FROM user ;
+-------------+---------------+
| Host        | User          |
+-------------+---------------+
| %           | root          |
| 192.168.1.% | rkun18        |
| localhost   | mysql.session |
| localhost   | mysql.sys     |
| localhost   | root          |
+-------------+---------------+


修改密码

--修改完密码一定刷新权限
FLUSH PRIVILEGES;

--多种方法
mysqladmin -uroot -p旧密码 password 'new_password' 

alter user 'root'@'localhost' identified by 'new_pssword';

SET PASSWORD=password(‘new_password’);


--root用户修改其他用户密码
alter user '其他用户名'@'localhost' identified by '密码';

GRANT SELECT ON *.* TO 用户名@’ip地址’ IDENTIFIED BY ‘密码’;

--普通用户修改自己密码
SET password=password(‘new_password’);

找回root密码

  • 修改mysql配置文件[mysqld]加上skip-grant-tables
#设置免密登录
[root@mysql ~]# vim /etc/my.cnf
[root@mysql ~]# cat /etc/my.cnf | grep skip
skip-grant-tables


  • 重启mysql
#终端输入mysql直接登录mysql数据库
[root@mysql ~]# systemctl restart mysqld
[root@mysql ~]# mysql

--切换系统库mysql
mysql> use mysql;

--设置密码
update user set authentication_string=password('密码') where user='root';

--之后注释掉免密登录 重启mysql 然后使用你设置的密码登录

密码复杂度

  • mysql默认启用密码复杂度设置,插件名:validate_password
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';



#修改配置文件
vim /etc/my.cnf

[mysqld]
plugin-load=validate_password.so
validate_password_policy=0
validate-password=FORCE_PLUS_PERMANENT


systemctl restart mysqld

#查看
mysql> show variables like 'validate%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 8     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+

--创建一个用户 使用较短的密码 显示没有满足策略要求
mysql> grant all on *.* to admin@'%' identified by '1234';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

--查看密码策略
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| LOW                        |
+----------------------------+

--查看密码复杂性最低要求
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|                          8 |
+----------------------------+

--更换密码复杂性策略 设置为1
mysql> set global validate_password_length=1;

--关闭策略

mysql>  set global validate_password_policy=0;

--再次设置用户和密码 成功
mysql> grant all on *.* to admin@'%' identified by '1234';
Query OK, 0 rows affected, 1 warning (0.00 sec)

--测试登录
[root@mysql ~]# mysql -uadmin -p1234
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.42 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
--成功!
--永久修改就修改my.cnf文件

远程登录

mysql -u用户名 -p密码 [ -h主机 ] [ -P端口 ];
mysql -u用户名 -p密码 [ -h主机 ] [ -P端口 ] [ -e"SQL语句" ]

日志管理

错误日志

  • 记录mysql启动过程中状态,报错,警告等信息。

  • 设置错误日志

    #配置错误日志
    [root@mysql ~]# mkdir /logs
    [root@mysql ~]# vim /etc/my.cnf
    #修改权限 
    [root@mysql ~]# chown -R mysql:mysql /logs/
    
    [root@mysql ~]# cat /etc/my.cnf | grep log-error
    log-error=/logs/mysql-error.log
    
    #重启服务
    [root@mysql ~]# systemctl restart mysqld
    
    
    
    --进入mysql查看
    mysql> select @@log_error;
    +-----------------------+
    | @@log_error           |
    +-----------------------+
    | /logs/mysql-error.log |
    +-----------------------+
    
    
    
    
    #进入虚拟机查看日志内容是否存在
    [root@mysql ~]# tail /logs/mysql-error.log 
    2023-06-12T19:50:05.941676Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
    2023-06-12T19:50:05.945078Z 0 [Warning] CA certificate ca.pem is self signed.
    2023-06-12T19:50:05.945468Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.
    2023-06-12T19:50:05.947524Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
    2023-06-12T19:50:05.947655Z 0 [Note] IPv6 is available.
    2023-06-12T19:50:05.947754Z 0 [Note]   - '::' resolves to '::';
    2023-06-12T19:50:05.947814Z 0 [Note] Server socket created on IP: '::'.
    2023-06-12T19:50:06.038988Z 0 [Note] Event Scheduler: Loaded 0 events
    2023-06-12T19:50:06.039879Z 0 [Note] /usr/sbin/mysqld: ready for connections.
    Version: '5.7.42'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server (GPL)
    #内容存在 说明配置成功
    
    

二进制日志

  • 数据恢复必备日志
  • 主从复制依赖
#修改配置文件
[root@mysql ~]# cat /etc/my.cnf | grep server_id 
server_id=6
[root@mysql ~]# cat /etc/my.cnf | grep log_bin
# log_bin
log_bin=/logs/binlogs/mysql-bin

#server_id 5.7版本后开启二进制日志必加参数
#创建文件夹 授权
[root@mysql ~]# mkdir -p /logs/binlogs/
[root@mysql ~]# chown -R mysql:mysql /logs/*

[root@mysql ~]# ll /logs/binlogs/
总用量 8
-rw-r-----. 1 mysql mysql 154 612 16:13 mysql-bin.000001
-rw-r-----. 1 mysql mysql  31 612 16:13 mysql-bin.index
#mysql-bin 配置文件配置的前缀 000001 mysql每次重启重新生成新的

  • 二进制文件内容除了查询类的语句,都会记录,即所有数据库变更类语句。
mysql> select @@binlog_format;
+-----------------+
| @@binlog_format |
+-----------------+
| ROW |
+-----------------+

--DDL、DCL直接以语句(statement)方式记录 .
--DML 语句有三种模式:SBR、RBR、MBR

--statement---->SBR:做什么记录什么,即SQL语句
--row---------->RBR:记录数据行的变化(默认模式,推荐)
--mixed-------->MBR:自动判断记录模式
#修改配置文件
[root@mysql ~]# vi /etc/my.cnf
[root@mysql ~]# cat /etc/my.cnf | grep binlog_format
binlog_format='ROW'
[root@mysql ~]# systemctl restart mysqld

--查看工作模式
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 |
+--------------------------------------------+--------------+

二进制日志事件

  • 事件为最小记录单位
  • 对于DDL和DCL,语句即事件
  • 对于DML,只记录提交的事务的DML语句
begin ; 事件1
a 事件2
b 事件3
commit; 事件4

查看二进制日志事件

[root@mysql ~]# cd /logs/binlogs/
[root@mysql binlogs]# mysqlbinlog mysql-bin.000001
...
AUIDoJM=
'/*!*/;
# at 123 #事件开始
#230612 16:18:14#事件发生时间 server id 6  end_log_pos #事件结束 154 CRC32 0x9c400eca  Previous-GTIDs
# [empty]
# at 154
#230612 16:33:25 server id 6  end_log_pos 177 CRC32 0x3ccc2292  Stop
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;#事件内容
...


--二进制日志配置
mysql>  show variables like '%log_bin%';
+---------------------------------+-------------------------------+
| Variable_name                   | Value                         |
+---------------------------------+-------------------------------+
| log_bin                         | ON                            |
| log_bin_basename                | /logs/binlogs/mysql-bin       |
| log_bin_index                   | /logs/binlogs/mysql-bin.index |
| log_bin_trust_function_creators | OFF                           |
| log_bin_use_v1_row_events       | OFF                           |
| sql_log_bin                     | ON                            |
+---------------------------------+-------------------------------+

--log_bin 开启二进制日志的开关
--log_bin_basename 位置
--sql_log_bin 临时开启或关闭二进制日志的小开关


--显示当前所有二进制日志文件
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 |       154 |
+------------------+-----------+

--显示二进制文件事件信息
mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| mysql-bin.000001 |   4 | Format_desc    |         6 |         123 | Server ver: 5.7.42-log, Binlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids |         6 |         154 |                                       |
| mysql-bin.000001 | 154 | Stop           |         6 |         177 |                                       |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+


二进制日志文件数据恢复实例

  • 操作
create database binlog charset utf8mb4;

use binlog;

create table t1(id int) engine=innodb charset=utf8mb4;

insert into t1 values (1),(2),(3);

insert into t1 values (11),(12),(13);

commit ;
--此时t1数据
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|   11 |
|   12 |
|   13 |
+------+


update t1 set id=10 where id >10;

commit ;

--更改后
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|   10 |
|   10 |
|   10 |
+------+


  • 删除数据
drop database binlog;
  • 数据恢复
--确认起点和终点
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |     1631 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

mysql> show binlog events in 'mysql-bin.000002';
| mysql-bin.000002 |  154 | Anonymous_Gtid |         6 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  
...                                                                 |
| mysql-bin.000002 |  219 | Query          |         6 |         375 | /* ApplicationName=DataGrip 2023.1.2 */ create database binlog charset utf8mb4   --起点                           |
| mysql-bin.000002 | 1428 | Anonymous_Gtid |         6 |        1493 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' 

| mysql-bin.000002 | 1493 | Query          |         6 |        1631 | /* ApplicationName=DataGrip 2023.1.2 */ drop database binlog        --终点                         
  • 截取日志
[root@mysql ~]# mysqlbinlog --start-position=219 --stop-position=1493 /logs/binlogs/mysql-bin.000002 > /data/bin.sql

  • 恢复日志
mysql> set sql_log_bin=0; # 临时关闭当前会话的binlog记录
mysql> source /data/bin.sql;
mysql> set sql_log_bin=1; # 打开当前会话的binlog记录
  • 查看是否恢复信息
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| binlog             |
| db1                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.01 sec)

mysql> use binlog;
Database changed
--成功恢复
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|   10 |
|   10 |
|   10 |
+------+

基于gtid二进制日志管理

  • 全局唯一事务编号
  • 幂等性
  • gtid包括:
    • server_uuid
    • tx_id

gtid配置

--查看gtid
mysql> show variables like '%gtid%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | OFF       |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | OFF       |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+

#修改配置
[root@mysql ~]# vi /etc/my.cnf

gtid_mode=on # 开启 gtid
enforce_gtid_consistency=true # 强制GTID一致性
log_slave_updates=1 # 主从复制中从库记录 binlog,并统一GTID信息

[root@mysql ~]# systemctl restart mysqld

基于gtid截取日志

  • 对于DDL,DCL一个操作就是一个gtid
  • 对于DML,一个完整事务就是gtid
mysql>  show variables like '%gtid%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | ON        |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | ON        |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+


mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+


  • –include-gtids=包含
  • –exclude-gtids=排除
  • –skip-gtids=跳过

基于gtid截取日志实例

  • 环境准备
--准备环境

create database gtid charset utf8mb4;

use gtid;

create table t1(id int) engine=innodb charset=utf8mb4;

insert into t1 values(1),(2),(3);

commit;

insert into t1 values(11),(12),(13);

 commit;
 
 mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|   11 |
|   12 |
|   13 |
+------+

--删除数据
drop database gtid;
--查看当前数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

  • 找寻起点终点(gtid)
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 |     1324 |              |                  | 5bae2709-0933-11ee-ad07-000c2977e40f:1-5 |
+------------------+----------+--------------+------------------+------------------------------------------+

show binlog events in 'mysql-bin.000001'

...  --省略
mysql-bin.000001,154,Gtid,6,219,SET @@SESSION.GTID_NEXT= '5bae2709-0933-11ee-ad07-000c2977e40f:1' --这里是起点 创建库
mysql-bin.000001,219,Query,6,369,/* ApplicationName=DataGrip 2023.1.2 */ create database gtid charset utf8mb4
... --省略
mysql-bin.000001,1127,Gtid,6,1192,SET @@SESSION.GTID_NEXT= '5bae2709-0933-11ee-ad07-000c2977e40f:5'
mysql-bin.000001,1192,Query,6,1324,/* ApplicationName=DataGrip 2023.1.2 */ drop database gtid --终点删除库  推荐一个数据库操作工具dataGrip很好用


  • 截取日志
#5是删除数据库所有只截取到1-4
[root@mysql ~]# mysqlbinlog --skip-gtids --include-gtids='5bae2709-0933-11ee-ad07-000c2977e40f:1-4' /logs/binlogs/mysql-bin.000001 > /data/gtid.sql

  • 恢复数据
mysql> set sql_log_bin=0;

mysql> source /data/gtid.sql
mysql> set sql_log_bin=1;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| gtid               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

mysql> use gtid;
Database changed
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|   11 |
|   12 |
|   13 |
+------+
--数据恢复成功

二进制日志其他操作

自动清理日志

--查看自动清理周期
show variables like '%expire%';

disconnect_on_expired_password,ON
expire_logs_days,0

--设置自动清理周期
set global expire_logs_days = 7;
show variables like '%expire%';

disconnect_on_expired_password,ON
expire_logs_days,7

#永久生效

[root@mysql ~]# vi /etc/my.cnf
[root@mysql ~]# cat /etc/my.cnf | grep expire
expire_logs_days=15

[root@mysql ~]# systemctl restart mysqld

show variables like '%expire%';

disconnect_on_expired_password,ON
expire_logs_days,15

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/676983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无忧行:突破网络封锁、跨境访问国外的网站和应用程序(安装注册及使用教程详解)

文章目录 步骤一:注册微软账号步骤二:修改账号的国家/地区步骤三:在Edge Dev浏览器中安装无忧行插件步骤四:创建 无忧行 账户步骤五:无忧行使用教程 包括注册微软账号、在Edge Dev浏览器中安装无忧行插件、创建 无忧行…

Python基础篇(六):组织管理代码—模块和包

组织管理代码—模块和包 前言模块(Module)创建模块使用模块 包(Package)创建包使用包 前言 在Python中,模块和包是组织和管理代码的重要概念。模块是一个包含 Python 定义和语句的文件,而包则是一组相关模块的目录。它们是组织和管理代码的强大工具&…

【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 文章目录 系列文章目录前言一、所有权(Ownership)1.1.、所有权(Ow…

【unity每日一记】 Camera相机+ Screen屏幕+动画机

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Flutter开发——图片加载与缓存源码解析

在Flutter中有个图片组件:Image,通常会使用它的Image.network(src)、Image.file(src)、Image.asset(src)来加载图片。 下面是Image的普通构造方法: const Image({super.key,required this.image,this.frameBuilder,this.loadingBuilder,this.errorBuilde…

第四章 机器学习

文章目录 第四章 决策树4.1基本流程4.2划分选择4.2.1信息增益4.2.2增益率4.2.3基尼指数 4.3剪枝处理4.3.1预剪枝4.3.2后剪枝 4.4连续与缺失值4.4.1连续值处理4.4.2缺失值处理 4.5多变量决策树 第四章 决策树 4.1基本流程 决策过程: 基本算法: 4.2划…

git——使用ssh连接远程仓库

文章目录 前言一. 获取邮箱和密码1. 本地配置你的名字和邮箱2. 使用命令获取你本地的邮箱和密码 二、生成ssh公钥1.任意一个文件夹路径打开Git Bash Here并输入以下命令连按三次回车2. 根据上面红框部分的地址打开文件夹3. 打开并查看id_rsa.pub 文件 三、在GitHub上连接ssh1. …

电商API知识点整理(一)商品采集接口获取商品详情数据API

商品采集接口背景 电商商品采集接口是一种机器人软件接口,用于从电子商务网站上爬取商品信息。它的主要作用是将电商网站上的商品信息采集和整合,方便用户使用。传统的商品采集需要人工收集和整理,工作量大、效率低;而电商商品采…

Flutter的文本、图片和按钮使用

像视图数据流转机制、底层渲染方案、视图更新策略等知识,都是构成一个UI框架的根本,看似枯燥,却往往具有最长久的生命力。 因此, 只有把这些最基础的知识弄明白,修好内功,才能触类旁通,由点及面…

输入阻抗、输出阻抗和阻抗匹配

读者问了一个问题:“集总参数电路中,阻抗匹配(内阻外阻)可以使负载得到最大的功率输出”这句话怎么理解? 这里涉及到几个概念:输入阻抗、输出阻抗、阻抗匹配,今天简单的聊一聊。 先了解一下阻…

用Visual Studio 2022写出你第一个Windows程序(程序保证能正常运行)

我是荔园微风,作为一名在IT界整整25年的老兵,今天来看看如何用Visual C写出你第一个Windows程序。 与其看很多Windows的书,不如先自己动手写一个Windows程序。由于Windows程序的特有机制,不建议去写那种简单的HELLO WORLD&#x…

【计算机网络详解】——网络层(学习笔记)

📖 前言:网络层它承担着网络间的数据传输和路由选择等核心任务,通过在传输层协议的基础上添加了路由和转发等功能,使得数据能够在全球范围内的互联网中自由流动。在这篇博客中,我们将深入探讨网络层的工作原理和具体实…

D. Binary String Sorting(枚举位置)

Problem - 1809D - Codeforces 给定一个仅由字符0和/或1组成的二进制字符串s。 您可以对此字符串执行几个操作(可能为零)。有两种类型的操作: 选择两个相邻的元素并交换它们。为了执行此操作,您需要支付1012硬币; 选…

网络作业10【计算机网络】

网络作业10【计算机网络】 前言推荐网络作业10一. 单选题(共13题,68.2分)二. 多选题(共4题,21.2分)三. 阅读理解(共2题,10.6分) 练习5-39 最后 前言 2023-6-23 15:35:39…

MySQL ----主从复制、分离解析

文章目录 一、MySQL 主从复制1.1服务性能扩展方式1.2 MySQL的扩展什么是读写分离? 1.3为什么要读写分离呢?1.4什么时候要读写分离?1.5主从复制与读写分离1.6mysql支持的复制类型1.7主从复制的工作过程1.8MySQL 读写分离原理1.9目前较为常见的…

2023年05月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)

2023-05 Scratch四级真题 分数:100 题数:24 测试时长:90min 一、单选题(共10题,共30分) 1. 下列积木运行后的结果是?(B)(说明:逗号后面无空格)&#xff08…

考研算法29天:希尔排序 【希尔排序】

算法介绍 希尔排序 等差数列 普通版插入排序 循环数组 第一次每n/2为间隔分为4组,然后组内排序。 第二次每n/4为间隔分为2组。然后组内排序 第三次n/8为间隔分为一组。然后组内排序。 组内排序用插入排序来排序。 注:也可以第一次为n/3为间隔&am…

Elasticsearch:DSL Query

Query DSL的分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有的数据,一般测试用,例如:match_all,但有分页限制,一次20…

知乎网友问题:Android 悬浮窗怎么让窗口响应事件的同时,也能让背后挡住的地方收到事件?---腾讯课堂千里马亲自解答

问题:Android 悬浮窗怎么让窗口响应事件的同时,也能让背后挡住的地方收到事件? 点击悬浮窗,自己能收到事件,背后挡住的区域也要能收到,怎么实现,return. false 无效 原生android机制不支持原因…

【C++入门第五期】类和对象(中)

这里写目录标题 类的6个默认成员函数构造函数特征 析构函数概念特性 拷贝构造特征拷贝构造如何自定义 运算符重载赋值运算符重载赋值运算符重载前置和后置重载 取地址及const取地址操作符重载 类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 class…