MySQL篇—通过Clone插件进行远程克隆数据(第三篇,总共三篇)

news2024/10/5 2:49:03

    在介绍 Clone 最终篇之前,我们先简要回顾一下前面所讲的内容。在第一篇中,我们探讨了 Clone 的用途、使用的前提条件、存在的限制,以及它的备份原理。Clone 是一种用于复制和备份数据的工具,它能够快速高效地创建数据的精确副本。使用 Clone 需要满足一定的前提条件,同时还需要注意一些限制。

    在第二篇中,我们深入探讨了如何通过 Clone 进行本地克隆数据。 本地克隆操作从MySQL服务器实例中克隆数据,其中克隆操作启动到MySQL服务器实例运行的同一服务器或节点上的目录。通过 Clone 进行本地克隆数据需要遵循一定的步骤,包括选择要克隆的源和目标位置、配置 Clone 参数、执行克隆操作等。完成克隆后,我们可以验证数据的完整性和一致性。

    今天,在第三篇中,我们将介绍如何通过 Clone 进行远程克隆数据。远程克隆是指将数据从源位置复制到远程服务器或云存储位置的过程。与本地克隆相比,远程克隆需要更多的配置和设置,以确保数据能够安全地传输到远程位置。我们将详细介绍如何配置远程克隆的参数、执行远程克隆操作以及验证数据的完整性和一致性。

    别忘了点赞哦!否则我会觉得我的文章写得像是一堆废纸。

官方文档对远程克隆数据的详细介绍:

MySQL :: MySQL 8.0 Reference Manual :: 5.6.7.3 Cloning Remote Data


远程克隆数据的用途: 

1、MGR节点快速扩充

2、主从复制的slave节点快速搭建(其实和MGR节点快速扩充操作时一样的,今天的案例以这种为主)

远程克隆数据语法: 

    远程克隆操作涉及本地MySQL服务器实例(“recipient”)启动克隆操作的服务器,以及远程MySQL服务器实例(“donor”)源数据所在的位置。当对接收方启动远程克隆操作时,克隆的数据将通过网络从donor传输到recipient。默认情况下,远程克隆操作将删除recipient数据目录中的数据,并将其替换为已克隆的数据。还可以选择将数据复制到recipient上的其他目录,以避免删除现有数据。

语法:

CLONE INSTANCE FROM 'user'@'host':port

IDENTIFIED BY 'password'

[DATA DIRECTORY [=] 'clone_dir']

[REQUIRE [NO] SSL];     ---用户需要有BACKUP_ADMIN权限

DATA DIRECTORY是一个可选子句用于在接收端指定要克隆的数据的目录如果不想删除recipient原数据目录中的现有数据,可以使用此选项修改数据copy的目录,必须有绝对路径,且目录必须不存在不指定的话,则默认克隆到Recipient的数据目录下。

[REQUIRE [NO] SSL]显式指定在通过网络传输克隆数据时是否使用加密连接。如果不能满足显式规范,则返回错误。如果未指定SSL子句,克隆将在默认情况下尝试建立加密连接,如果安全连接尝试失败,则返回到不安全连接。无论是否指定此子句,克隆加密数据时都需要安全连接。  

如何停止远程克隆

SQL> select * from performance_schema.clone_status\G;       ---克隆操作的状态

PIDProcesslist ID。对应show processlist中的Id,如果要终止当前的克隆操作,执行kill processlist_id命令即可。

SQL> Kill+id号;

远程克隆相关视图: 

SQL> select * from performance_schema.clone_status\G;       ---克隆操作的状态

PIDProcesslist ID。对应show processlist中的Id,如果要终止当前的克隆操作,执行kill processlist_id命令即可。

STATE克隆操作的状态,Not Started(克隆尚未开始),In Progress(克隆中),Completed(克隆成功),Failed(克隆失败)。如果是Failed状态,ERROR_NO,ERROR_MESSAGE会给出具体的错误编码和错误信息。

BEGIN_TIME克隆操作开始

END_TIME:克隆结束时间。

SOURCE:Donor(源库)实例的地址。

DESTINATION克隆目录。“LOCAL INSTANCE”代表当前实例的数据目录。

BINLOG_FILE克隆完成后的file号

BINLOG_POSITIONfile的pos点

GTID_EXECUTED克隆的gtid点,可利用这些信息来搭建从库。

SQL> select

   stage,

   state,

   cast(begin_time as DATETIME) as "START TIME",

   cast(end_time as DATETIME) as "FINISH TIME",

   lpad(sys.format_time(power(10,12) * (unix_timestamp(end_time) - unix_timestamp(begin_time))), 10, ' ') as DURATION,

   lpad(concat(format(round(estimate/1024/1024,0), 0), "MB"), 16, ' ') as "Estimate",

   case when begin_time is NULL then LPAD('%0', 7, ' ')

   when estimate > 0 then

   lpad(concat(round(data*100/estimate, 0), "%"), 7, ' ')

   when end_time is NULL then lpad('0%', 7, ' ')

   else lpad('100%', 7, ' ')

   end as "Done(%)"

   from performance_schema.clone_progress;

STAGE:一个克隆操作可依次细分为DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC,RESTART,RECOVERY等7个阶段。当前阶段结束了才会开始下一个阶段。本地克隆只涉及到前五个阶段完成DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC,远程克隆涉及到七个阶段

STATE:当前阶段的状态。有三种状态:Not Started,In Progress,Completed。

BEGIN_TIME:当前阶段的开始时间和结束时间。

END_TIME:当前阶段的开始时间和结束时间。

THREADS:当前阶段使用的并发线程数。并发线程数一般由clone_autotune_concurrency参数自动调节默认为ON此时该参数最大线程数受clone_max_concurrency参数控制。若设置为OFF则并发线程数的数量将是固定的clone_max_concurrency参数保持一致。clone_max_concurrency参数的默认值为16。

ESTIMATE:预估的数据量。

DATA:已经拷贝的数据量。

NETWORK:通过网络传输的数据量。如果是本地克隆,该列的值为0。

DATA_SPEED:当前数据拷贝的速率。注意,是当前值。

NETWORK_SPEED:当前网络传输的速率。注意,是当前值。

案例开始(通过远程克隆对主从复制的slave节点快速搭建):

1、主库(Donor)上的配置

(1)将1个从库的域名加入到hosts文件

[root@mysql1 ~]# vi /etc/hosts

192.168.56.31 mysql1     ---原有域名解析
192.168.56.32 mysql2

(2)创建二进制和中继日志目录(如果主库已经开了二进制日志则不需要配置)

[root@mysql1 ~]# mkdir -p /mysql/log/3306/binlog      ---二进制目录日志

[root@mysql1 ~]# mkdir -p /mysql/log/3306/relaylog    ---中继日志目录

[root@mysql1 ~]# chown -R mysql:mysql /mysql/log/3306/binlog     

[root@mysql1 ~]# chown -R mysql:mysql /mysql/log/3306/relaylog

[root@mysql1 ~]# chmod -R 775 /mysql/log/3306/binlog

[root@mysql1 ~]# chmod -R 775 /mysql/log/3306/relaylog

(3)配置相关参数

[root@mysql1 ~]# cp  /etc/my.cnf /etc/my.cnf.bak

[root@mysql1 ~]#vi  /etc/my.cnf     

###binlog###
binlog_gtid_simple_recovery=1                    ---(默认值)这个参数控制了当mysql启动或重启时,mysql在搜寻GTIDs时是如何迭代使用binlog文件的。这个选项设置为真,会提升mysql执行恢复的性能。因为这样mysql-server启动和binlog日志清理更快
log_bin=/mysql/log/3306/binlog/itpuxdb-binlog    ---二进制输出路径(指定之后将指定的值赋给log_bin_basename这个参数上,log_bin显示为on,bug)
log_bin_index=/mysql/log/3306/binlog/itpuxdb-binlog.index     ---记录二进制日志文件的基本名称和路径在这个可读的文件中。默认和log_bin参数的值相同,并在此基础上会自动加上扩展名.index
binlog_format=ROW                     ----二进制工作模式,’ROW’会记录每一行数据被修改的情况(必须)   
binlog_rows_query_log_events=on       ----二进制日志中记录更详细的SQL操作。一个事务就是一个事件,binary log events
expire_logs_days = 10                 ----二进制日志保留天数(根据业务安排,官方表示只删除二进制。中继日志由relay_log_purge参数控制在sql线程应用完之后自动清理,默认为on启用)

(4)Clone(数据克隆)插件安装

mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';    ---这种是手动在线安装插件,不需要重启,并且重启后也不会失效。

mysql> show plugins;

(5)主从库创制用并授 

mysql> create user 'repuser'@'%' identified with mysql_native_password BY '123456';

mysql> grant replication client,replication slave on *.* to 'repuser'@'%';

mysql> flush privileges;

mysql> select user,host from mysql.user;

(5)在Donor实例上创建克隆用户(用于recipient端复制)

mysql> create user 'donor_clone_user'@'%' identified by '123456';

mysql> grant backup_admin on *.* to 'donor_clone_user'@'%';

2、从库(recipient)上的配置

(1)将主从库的域名加入到hosts文件

[root@mysql2 ~]# vi /etc/hosts

192.168.56.31 mysql1
192.168.56.32 mysql2

(2)创建二进制和中继日志目录

[root@mysql2 ~]# mkdir -p /mysql/log/3306/binlog      ---二进制目录日志

[root@mysql2 ~]#mkdir -p /mysql/log/3306/relaylog    ---中继日志目录

[root@mysql2 ~]#chown -R mysql:mysql /mysql/log/3306/binlog     

[root@mysql2 ~]#chown -R mysql:mysql /mysql/log/3306/relaylog

[root@mysql2 ~]#chmod -R 775 /mysql/log/3306/binlog

[root@mysql2 ~]#chmod -R 775 /mysql/log/3306/relaylog

(3)配置相关参数

[root@mysql2 ~]#cp  /etc/my.cnf /etc/my.cnf.bak

[root@mysql2 ~]#vi  /etc/my.cnf     

###binlog###
binlog_gtid_simple_recovery=1                  ---(默认值)这个参数控制了当mysql启动或重启时,mysql在搜寻GTIDs时是如何迭代使用binlog文件的。这个选项设置为真,会提升mysql执行恢复的性能。因为这样mysql-server启动和binlog日志清理更快
log_bin=/mysql/log/3306/binlog/itpuxdb-binlog  ---二进制输出路径(指定之后将指定的值赋给log_bin_basename这个参数上,log_bin显示为on,bug)
log_bin_index=/mysql/log/3306/binlog/itpuxdb-binlog.index   ---记录二进制日志文件的基本名称和路径在这个可读的文件中。默认和log_bin参数的值相同,并在此基础上会自动加上扩展名.index
binlog_format=ROW                   ----二进制工作模式,’ROW’会记录每一行数据被修改的情况(必须)
binlog_rows_query_log_events=on     ----二进制日志中记录更详细的SQL操作。一个事务就是一个事件,binary log events
expire_logs_days = 10               ----二进制日志保留天数(根据业务安排,官方表示只删除二进制。中继日志由relay_log_purge参数控制在sql线程应用完之后自动清理,默认为on启用)

###slave parameter###
max_relay_log_size                                 ---中继日志大小,默认为0,可以手动定义大小。官方表示如果max_relay_log_size为0,那么将继承max_binlog_size二进制日志大小(继承二进制大小即可,默认1G大小)
relay_log=/mysql/log/3306/relaylog/itpuxdb_relay   ---中继日志输出路径
relay_log_index=/mysql/log/3306/relaylog/itpuxdb_relay.index    ---中继日志索引输出路径(根据生产而定) 
slave_parallel_type=LOGICAL_CLOCK                               ---默认DATABASE值,兼容MySQL 5.6基于schema级别的并发复制,基于库的并行复制方式;   LOGICAL_CLOCK值:基于组提交的并行复制方式,组提交是一堆事务的集合,减轻1O压力(之前是采用一个事务提交一次,设置为LOGICAL_CLOCK后多个事务执行完成后提交一次,减轻IO压力)。
super_read_only=1                                               ---Slave机器上对数据库进行修改或者删除,会导致主从的不一致,需要对Slave机器设置为read_only=1让Slave提供只读操作。read_only仅仅对没有SUPER权限的用户有效(即mysql.user表的Super_priv字段为Y),一般给App的权限是不需要SUPER权限的。参数super_read_only可以将有SUPER权限的用户也设置为只读,且该参数设置为ON后 read_only也跟着自动设置为ON
slave_parallel_workers=4                                        ---4个sql_thread(coordinator线程)来进行并行复制,可以动态调整复制线程数(是四个SQL线程,IO线程还是一个)。并且需要重启主从复制生效
relay_log_recovery=1                                            ---IO线程安全。支持中继日志自我修复功能,日志丢失损坏时,从主master获取日志,完成日志的恢恢复(该参数表示当前接受到的relay log全部删除,然后从sql线程回放到的位置重新拉取)
relay_log_info_repository=table                                 ---SQL线程安全。默认是file,SQL线程的数据回放是写数据库操作,relay-info是写文件操作。这两个操作很难保证一致性,relay-info将写入到mysql.slave_relay_log_info这张表中
master_info_repository=table                                    ---默认是file,IO线程也是接收一个个的event。通过设置参数master_info_repository可以将master-info信息写到什么位置,性能上比设置为FILE有很高的提升,可靠性也得到保证,设置为TABLE后,master-info将信息保存到mysql.slave_master_info
slave_skip_errors=ddl_exist_errors                              ---解决ddl语句在从库造成冲突,可设置off,all,ErorCode,ddl_exist_erros选项。默认为off。如果使用show slave status\G中看到last_Errno:1062,那么设置slave_skip_errors=1062,slave_skip_errors=all,slave_skip_errors=ddl_exist_errors解决
slave_preserve_commit_order=1                                   ---slave上commit的顺序保持一致,必须为1,否则可能会有GAP锁产生

(4)Clone(数据克隆)插件安装

mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';    ---这种是手动在线安装插件,不需要重启,并且重启后也不会失效。

mysql> show plugins;

(5)主从库创制用并授 

mysql> create user 'repuser'@'%' identified with mysql_native_password BY '123456';

mysql> grant replication client,replication slave on *.* to 'repuser'@'%';

mysql> flush privileges;

mysql> select user,host from mysql.user;

(6)在Recipient实例上创建克隆用户(用于recipient连接)

mysql> create user 'recipient_clone_user'@'%' identified by '123456';

mysql> grant clone_admin on *.* to 'recipient_clone_user'@'%';

(7)设置克隆期间允许DDL为了在克隆期间允许DDL,设置clone_ddl_timeout参数为0,虽然会导致克隆失败但要保证DDL不受影响。8.0.27版本新增clone_block_ddl参数在克隆期间允许DDL同时不会导致克隆失败。这个设置可选

mysql> set global clone_ddl_timeout=0;    ---设置为0意味着克隆操作不会等待备份锁。在这种情况下执行并发DDL操作可能导致克隆操作失败,设置为其他数值发现还是需要等到克隆完成,只有设置为0。

(8)在Recipient上设置Donor白名单,只克隆白名单中的实例

mysql> set global clone_valid_donor_list = '192.168.56.31:3306';     ----Donor主库的ip和端口

(9)在Recipient上发起克隆命令

[root@slave ~]# mysql -urecipient_clone_user -p123456 -S /mysql/data/3306/mysql.sock

mysql> clone instance from 'donor_clone_user'@'192.168.56.31':3306 identified by '123456';  ---从库完成DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC后,在RESTART阶段进行重启实例,在启动的过程中会用xxx.#clone替换掉原来的系统表空间文件,最后进行RECOVERY

(10)查看克隆操作

mysql> select * from performance_schema.clone_status\G;       ---克隆操作的状态

PIDProcesslist ID。对应show processlist中的Id,如果要终止当前的克隆操作,执行kill processlist_id命令即可。

STATE克隆操作的状态,Not Started(克隆尚未开始),In Progress(克隆中),Completed(克隆成功),Failed(克隆失败)。如果是Failed状态,ERROR_NO,ERROR_MESSAGE会给出具体的错误编码和错误信息。

BEGIN_TIME克隆操作开始

END_TIME:克隆结束时间。

SOURCE:Donor(源库)实例的地址。

DESTINATION克隆目录。“LOCAL INSTANCE”代表当前实例的数据目录。

BINLOG_FILE克隆完成后的file号

BINLOG_POSITIONfile的pos点

GTID_EXECUTED克隆的gtid点,可利用这些信息来搭建从库。

mysql> select 
   stage,
   state,
   cast(begin_time as DATETIME) as "START TIME",
   cast(end_time as DATETIME) as "FINISH TIME",
   lpad(sys.format_time(power(10,12) * (unix_timestamp(end_time) - unix_timestamp(begin_time))), 10, ' ') as DURATION,
   lpad(concat(format(round(estimate/1024/1024,0), 0), "MB"), 16, ' ') as "Estimate",
   case when begin_time is NULL then LPAD('%0', 7, ' ')
   when estimate > 0 then
   lpad(concat(round(data*100/estimate, 0), "%"), 7, ' ')
   when end_time is NULL then lpad('0%', 7, ' ')
   else lpad('100%', 7, ' ')
   end as "Done(%)"
   from performance_schema.clone_progress;

STAGE:一个克隆操作可依次细分为DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC,RESTART,RECOVERY等7个阶段。当前阶段结束了才会开始下一个阶段。本地克隆只涉及到前五个阶段完成DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC,远程克隆涉及到七个阶段

STATE:当前阶段的状态。有三种状态:Not Started,In Progress,Completed。

BEGIN_TIME:当前阶段的开始时间和结束时间。

END_TIME:当前阶段的开始时间和结束时间。

THREADS:当前阶段使用的并发线程数。并发线程数一般由clone_autotune_concurrency参数自动调节默认为ON此时该参数最大线程数受clone_max_concurrency参数控制。若设置为OFF则并发线程数的数量将是固定的clone_max_concurrency参数保持一致。clone_max_concurrency参数的默认值为16。

ESTIMATE:预估的数据量。

DATA:已经拷贝的数据量。

NETWORK:通过网络传输的数据量。如果是本地克隆,该列的值为0。

DATA_SPEED:当前数据拷贝的速率。注意,是当前值。

NETWORK_SPEED:当前网络传输的速率。注意,是当前值。

10)验证从库数据

[root@mysql1 data]# mysql

mysql> show databases;

mysql> select table_name from information_schema.tables;

mysql> select * from ded.itpuxbak11;  

mysql> select * from itpuxdb.emp; 

mysql> select * from itpuxdb.yg;  ---能查询到数据,表示数据恢复的没问题。可能存在表不能查询的情况,那么就是数据字典没有记录表的问题,需要多验证几张

(11在从库上使 slave 与 master 建立连接

mysql> select * from performance_schema.clone_status\G;

通过clone在线数据克隆的相关视图得知,备份时当时的二进制写入的是binlog.000127日志,pos点为236。Gtid为aa51378a-878d-11ed-b4fb-080027504174:1-11284,bf5ce993-4462-11ee-9699-080027504174:1-4,那么通过gtid无损复制需要指定gtid,show master status;的值

mysql> set @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;

mysql> set @@SESSION.SQL_LOG_BIN= 0;

mysql> set @@GLOBAL.GTID_PURGED='db71491a-4105-11ec-b44d-08002745a35a:1-264';     ---指定gtid_purged为clone在线数据克隆备份时的gtid点,就是通知数据库这个gtid之前的事务被清除了(也是就记录自动清理或者手动清理的二进制最后的全局事务ID),向设置的gtid_purged点开始向后复制事务。如果有多个事务,用逗号分隔即可

mysql> set @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

mysql> Show variables like '%gtid%';

mysql> change master to
master_host='192.168.56.31', 
master_port=3306,
master_user='repuser',
master_password='123456',
master_auto_position=1;    ---GTID replication采用自动定位binlog+position

mysql> start slave;           ----启动主从复制

mysql> show slave status \G;   ----Auto_Position为1:使用的就是GTID技术,GTID replication采用自动binlog+position。

 (12)验证对象数量 

mysql> select * from sys.schema_object_overview where db='itpuxdb';    ---数据对象

 

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

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

相关文章

如何在simulink中怎么获取足端轨迹代码解释?

在使用Java代码框架统计用户获取足端轨迹时,我们可以使用Simulink的外部接口功能和Java的网络编程来实现。 首先,我们需要在Simulink中配置外部接口以便与Java进行通信。可以使用Simulink中的TCP/IP或UDP模块来实现网络通信。假设我们选择TCP/IP模块。 …

在线培训系统开发

随着远程学习和数字化教育的兴起,在线培训系统成为了教育领域的重要组成部分。在这篇文章中,我们将探讨在线培训系统开发的一些关键技术和概念。 前端开发 在在线培训系统中,前端开发起着至关重要的作用。使用现代的前端框架如React、Vue或…

Linux系统命令 --- seq tr cut sort uniq

目录 一、seq ---- 输出序列化参数 1、seq 数字 按照顺序打印 2、-s 使用指定字符串分割数字 3、计算1-20,并求和 4、-w 在每一列数字前加零 默认补全 二、tr、对数字进行处理 1、替换 2、删除 3、压缩 4、补集 三、cut 截取 四、sort 排序 …

开源内容管理系统Wagtail本地安装运行并结合内网穿透实现公网访问

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个用Python编写的开源CMS,建立在Django Web框架上。Wagtail 是一个基于 Django 的开源内容管理系统&#xf…

永不停止,永远在路上!MIAOYUN 2023年度回顾

2023 MIAOYUN年度关键词:坚持/沉淀/成长 2023年,我们身处虚浮遥荡的世界:支原体肺炎、流感接二连三、经济下行成热词、人人思危;更有暴雨成灾,核污水扩散,战火与地震不断。 坏事发生时,你有三种…

Android中两种选择联系人方式

1.在选择联系人方式网上也有很多案例 有的说是使用ContactsContract.CommonDataKinds.Phone.CONTENT_URI也有的说是使用ContactsContract.Contacts.CONTENT_URI其实这两种方式都可以使用 只不过ContactsContract.Contacts.CONTENT_URI这种方式需要多查询一遍 一、使用Contacts…

文心一言 VS 讯飞星火 VS chatgpt (179)-- 算法导论13.4 2题

二、用go语言,在 RB-DELETE 中,如果 x 和 x.p 都是红色的,证明:可以通过调用 RB-DELETE-FIXUP(T,x)来恢复性质 4。 文心一言: 在红黑树中,性质4指的是:每个节点要么是红色&#xf…

前端react入门day03-react获取dom与组件通信

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 受控表单绑定 React中获取DOM 组件通信 父传子 父传子-基础实现 父传子-props说明 父传子 - 特殊的…

Linux定时任务调度以及磁盘分区、挂载

一、定时任务调度 1、crond任务调度 定时任务设置 是指系统在某个时间执行的特定命令或程序 任务调度分类: ①系统工作:有些重要的工作必须周而复始地执行,如病毒扫描 ②个别用户工作:个别用户可能希望执行某些程序,比…

2024抖店选品方法,及侧重方向思路(全新版本),可收藏备用

我是王路飞。 做无货源抖店的商家,牢记【选品重于泰山】这句话。 要知道电商的本质就是产品,你所有的运营手段也都是围绕产品进行的,店铺内的流量也都是冲着产品来的。 产品不行,哪怕再多的流量、再高的曝光率,也带…

Docker镜像构建优化及上传

前言 Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使 用 Dockerfile 去构建镜像好比使用 pom 去构建 maven 项目一样,有异曲同工之妙 一.Dockerfile镜像构建 1.Dockerfile基本…

【教学类-43-21】20240113 数独(三)11-12-13-14-15宫格 无空行A4模板 上下结构(附加3宫格 4宫格)

作品展示: 11-15宫格 A4 两份 下面空行做一点4-5宫格题目 : 已经制作没有分割线的连在一起的3-10宫格模板 【教学类-43-19】20240113 数独(一) 3-5-6-7-8-10宫格 无空行A4模板-CSDN博客文章浏览阅读399次,点赞13次…

架构师 - 架构师是做什么的 - 学习总结

架构师核心定义 架构师是什么 架构师是业务和技术之间的桥梁 架构师的核心职责是消除不确定性、和降低复杂性 架构设计环 架构师的三个核心能力 架构师的三个关键思维 架构师主要职责 架构设计 Vs 方案设计 架构设计前期 主要任务 澄清不确定性 明确利益干系人的诉求消除冲…

Python中执行定时任务详细教程与示例代码

更多资料获取 📚 个人网站:ipengtao.com 定时任务是自动化执行的一种方式,它可以在指定的时间间隔或特定时间点运行Python代码。无论是自动化数据备份、定期清理文件还是其他周期性任务,Python都提供了多种方式来执行定时任务。本…

Java实现天然气工程运维系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司(施工单位)功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

2023 China DevOpsDays(DOD) DXCon 国际数字化转型与创新管理企业峰会:核心内容与学习收获(附大会核心PPT下载)

随着科技的飞速发展,数字化转型已成为企业持续发展的必经之路。2023年的China DevOpsDays & DXCon国际数字化转型与创新管理企业峰会,汇集了业界顶尖的专家、学者和企业领袖,共同探讨数字化转型的最新趋势和实践。本文将深入剖析大会的核…

MySQl导入与导出远程备份

文章目录 一. navicat导入导出 二. mysqldump命令导入导出导入导出 三. load data infile命令导入导出导入导出 四. 远程备份导入导出思维导图 一. navicat 导入 右键——>运行SQL文件 导出 选中要导出的表➡右键➡转储SQL文件➡数据和结构 二. mysqldump命令导入导出…

QTabelView使用代理自定义,第一列为QLabel第二列为下拉框

预览界面 代理源文件 CustomParamViewDelegate.cpp #include "CustomParamViewDelegate.h"CustomParamViewDelegate::CustomParamViewDelegate(QObject *parent): QStyledItemDelegate(parent) {}CustomParamViewDelegate::~CustomParamViewDelegate() {}QWidget* …

postgresql16 物理复制与逻辑复制的实现和对比

本文面向想要练习 PostgreSQL 中数据库复制基础知识但可能无法访问远程服务器的初学者。我认为学习新技术时,在自己的机器上运行示例以巩固概念是至关重要的。对于副本来说,这可能很困难,因为许多可用的资源假设用户具有一定的 PostgreSQL 经…

快乐学Python,如何使用爬虫从网页中提取感兴趣的内容?

前面的内容,我们了解了使用urllib3和selenium来下载网页,但下载下来的是整个网页的内容,那我们又怎么从下载下来的网页中提取我们自己感兴趣的内容呢?这里就需要Python的另一个库来实现-BeautifulSoup。 BeautifulSoup 是一个 Py…