从零开始构建支持TLS1.2的Web服务器Linux版(五)选装-MySql(yum安装方式)

本文介绍如何在CentOS系统上安装MySQL数据库,并进行基本配置,包括初始化数据库、设置默认编码和添加远程登录用户等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博文目录

删除旧版本

  1. 查看系统中是否已经安装MySql
    这个命令就会查看该操作系统上是否已经安装了mysql数据库

    [root@VM_195_229_centos ~]# rpm -qa | grep mysql
  2. 有的话,我们就通过 rpm -e mysql 命令 或者 rpm -e --nodeps mysql 命令来卸载掉

    
    # 普通删除模式
    
    [root@xiaoluo ~]# rpm -e mysql
    
    # 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
    
    [root@xiaoluo ~]# rpm -e --nodeps mysql

    在删除完以后我们可以通过 rpm -qa | grep mysql 命令来查看mysql是否已经卸载成功!!

通过yum来进行mysql的安装

  1. 检索可用的mysql数据库版本

    [root@VM_195_229_centos ~]# yum list | grep mysql

如果没有找到需要的版本,可以添加源,然后更新后再检索。

  1. 下载mysql的repo源,这里需要根据系统版本来确定安装那个源文件。
    MySql官网上,可以找到如下内容:
    MySql Yum Repository

    • 点击Download Now>> 跳转到下载界面:

      Repo 下载选择

    • 点击下载,然后跳转到如下画面,直接右击No thanks, just start my download., 复制下载地址,就可以使用wget下载。
      下载地址

    • 在服务器上,下载源。

      [root@VM_195_229_centos setup]# wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
      2017-08-05 12:18:34 (236 MB/s) - ‘mysql57-community-release-el7-11.noarch.rpm’ saved [25680/25680]
      [root@VM_195_229_centos setup]# 
  2. 通过md5sum检查下载文件是否完整合法:

    [root@VM_195_229_centos setup]# md5sum mysql57-community-release-el7-11.noarch.rpm 
    c070b754ce2de9f714ab4db4736c7e05  mysql57-community-release-el7-11.noarch.rpm
    [root@VM_195_229_centos setup]# 
  3. 安装mysql57-community-release-el7-11.noarch.rpm包:

    [root@VM_195_229_centos setup]# rpm -ivh mysql57-community-release-el7-11.noarch.rpm
    warning: mysql57-community-release-el7-11.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:mysql57-community-release-el7-11 ################################# [100%]
    [root@VM_195_229_centos setup]# 

    安装这个包后,会获得两个mysql的yum repo源:/etc/yum.repos.d/mysql-community.repo/etc/yum.repos.d/mysql-community-source.repo

  4. 安装mysql-server

    [root@VM_195_229_centos setup]# yum install mysql-server
    Dependencies Resolved
    
    ==================================================================================================================================================================================================================
    
     Package                                                       Arch                                     Version                                         Repository                                           Size
    ==================================================================================================================================================================================================================
    
    Installing:
     mysql-community-libs                                          x86_64                                   5.7.19-1.el7                                    mysql57-community                                   2.1 M
         replacing  mariadb-libs.x86_64 1:5.5.52-1.el7
     mysql-community-libs-compat                                   x86_64                                   5.7.19-1.el7                                    mysql57-community                                   2.0 M
         replacing  mariadb-libs.x86_64 1:5.5.52-1.el7
     mysql-community-server                                        x86_64                                   5.7.19-1.el7                                    mysql57-community                                   164 M
    Installing for dependencies:
     mysql-community-client                                        x86_64                                   5.7.19-1.el7                                    mysql57-community                                    24 M
     mysql-community-common                                        x86_64                                   5.7.19-1.el7                                    mysql57-community                                   272 k
     numactl-libs                                                  x86_64                                   2.0.9-6.el7_2                                   os                                                   29 k
    
    
    Transaction Summary
    ==================================================================================================================================================================================================================
    
    Install  3 Packages (+3 Dependent packages)
    
    Total download size: 192 M
    Is this ok [y/d/N]: 

    此时,就开始安装mysql了。

配置MySql

  1. 数据库初始化
    目前我是以root身份安装运行 mysql的,为了保证数据库目录与文件的所有者为 mysql,需要指定User执行下面的命令初始化:

    [root@VM_195_229_centos setup]# mysqld --initialize --user=mysql

    如果是以 mysql 身份运行,则可以去掉 --user 选项。
    另外 --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过期,登陆后你需要设置一个新的密码,而使用 --initialize-insecure 命令则不使用安全模式,则不会为 root 用户生成一个密码。

    这里演示使用的 --initialize 初始化的,会生成一个root 账户密码,密码在/var/log/mysqld.log文件里,root@localhost:后面的部分就是自动生成的密码:ugMr*!:uo67I
    你也可以检索临时密码grep 'temporary password' /var/log/mysqld.log

    [root@VM_195_229_centos ~]# cat /var/log/mysqld.log
    2017-08-08T11:08:19.189978Z 1 [Note] A temporary password is generated for root@localhost: ugMr*!:uo67I
    [root@VM_195_229_centos ~]# 
  2. 启动MySql服务,并查看启动状态:

    [root@VM_195_229_centos ~]# systemctl start mysqld
    [root@VM_195_229_centos ~]# systemctl status mysqld
  3. 设置开机即启动:

    [root@VM_195_229_centos ~]# systemctl enable mysqld
    [root@VM_195_229_centos ~]# systemctl daemon-reload
  4. 修改root用户默认的本地登录密码:

    [root@VM_195_229_centos ~]# mysql -u root -p
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPasswd123!';
    --或者
    mysql> set password for 'root'@'localhost'=password('MyNewPasswd123!');

    mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。
    否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误
    通过msyql环境变量可以查看密码策略的相关信息:

    mysql> show variables like '%password%';
    +---------------------------------------+--------+
    | Variable_name                         | Value  |
    +---------------------------------------+--------+
    | default_password_lifetime             | 0      |
    | disconnect_on_expired_password        | ON     |
    | log_builtin_as_identified_by_password | OFF    |
    | mysql_native_password_proxy_users     | OFF    |
    | old_passwords                         | 0      |
    | report_password                       |        |
    | sha256_password_proxy_users           | OFF    |
    | 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              | MEDIUM |
    | validate_password_special_char_count  | 1      |
    +---------------------------------------+--------+
    14 rows in set (0.00 sec)
    
    mysql> 

    默认策略MEDIUM的密码检查规则:

    validate_password_policy:密码策略,默认为MEDIUM策略
    validate_password_dictionary_file:密码策略文件,策略为STRONG才需要
    validate_password_length:密码最少长度
    validate_password_mixed_case_count:大小写字符长度,至少1个
    validate_password_number_count :数字至少1个
    validate_password_special_char_count:特殊字符至少1个

    共有以下几种密码策略,MySQL官网密码策略

    策略检查规则
    0 or LOWLength
    1 or MEDIUMLength; numeric, lowercase/uppercase, and special characters
    2 or STRONGLength; numeric, lowercase/uppercase, and special characters; dictionary file
  5. 配置默认编码为utf8
    修改/etc/my.cnf配置文件, 在相应的位置添加编码配置,如果没有相应的group,直接添加即可:

    [client]
    default-character-set=utf8
    
    [mysqld]
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    
    [mysql]
    no-auto-rehash
    default-character-set=utf8

    重新启动mysql服务,查看数据库默认编码:

    mysql> show variables like '%character%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | utf8                       |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | utf8                       |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)
    
    mysql> 

添加远程登录用户

默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户,为了安全起见,建议添加一个新的超级帐户:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'NewAdmin'@'%' IDENTIFIED BY 'newadminpassword!!!' WITH GRANT OPTION;
附录:

默认配置文件路径:
配置文件:/etc/my.cnf
日志文件:/var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
数据文件:/var/lib/mysql

<think>我们之前已经部署了MySQL主从集群(一主两从),现在要详细讲解MySQLRouter的安装、配置和使用。MySQLRouter是MySQL官方提供的轻量级中间件,用于实现读写分离和故障转移。步骤概述:1.安装MySQLRouter2.配置MySQLRouter(连接主从集群)3.启动MySQLRouter4.测试读写分离详细步骤:一、安装MySQLRouter这里我们使用Docker方式部署,也可以直接在宿主机安装。我们以Docker方式为例。二、配置MySQLRouter我们需要创建一个配置文件,定义读写端口和只读端口的路由规则。三、启动MySQLRouter四、测试下面我们详细展开。注意:我们假设主从集群已经配置好,主库容器名为mysql-master,从库为mysql-slave1mysql-slave2,都在同一个Docker网络(mysql-net)中。步骤1:创建MySQLRouter配置文件创建目录存放配置文件:```bashmkdir-pmysql-router/conf```创建配置文件`mysql-router/conf/mysqlrouter.conf`:```ini[DEFAULT]logging_folder=/var/log/mysqlrouterruntime_folder=/var/run/mysqlrouterconfig_folder=/etc/mysqlrouterdata_folder=/var/lib/mysqlrouter[logger]level=INFO#配置写请求路由(主库)[routing:primary]bind_address=0.0.0.0bind_port=6446dest_addresses=mysql-master:3306routing_strategy=first-availableprotocol=classic#配置读请求路由(从库,轮询)[routing:replicas]bind_address=0.0.0.0bind_port=6447dest_addresses=mysql-slave1:3306,mysql-slave2:3306routing_strategy=round-robinprotocol=classic```步骤2:创建Dockerfile构建MySQLRouter镜像由于官方提供了MySQLRouter的Docker镜像,我们可以直接使用,然后挂载配置文件。但为了方便,我们编写一个docker-compose文件来部署。步骤3:使用docker-compose部署MySQLRouter在docker-compose.yml中添加mysql-router服务:```yamlversion:'3.8'services:#之前的mysql-master,mysql-slave1,mysql-slave2省略...mysql-router:image:mysql/mysql-router:8.0.35container_name:mysql-routerdepends_on:-mysql-master-mysql-slave1-mysql-slave2ports:-"6446:6446"#写端口-"6447:6447"#读端口volumes:-./mysql-router/conf:/etc/mysqlrouter#挂载配置文件networks:-mysql-netcommand:--config/etc/mysqlrouter/mysqlrouter.conf```步骤4:启动服务```bashdocker-composeup-dmysql-router```步骤5:验证MySQLRouter运行状态```bashdockerlogsmysql-router```查看日志,如果没有错误,说明启动成功。步骤6:测试读写分离我们需要一个测试脚本,分别连接写端口(6446)和读端口(6447)进行操作。写操作测试(连接到6446端口,应该只写主库):```sql--创建测试表CREATETABLEtest_table(idINTPRIMARYKEYAUTO_INCREMENT,dataVARCHAR(100));INSERTINTOtest_table(data)VALUES('writetestonmaster');```读操作测试(连接到6447端口,应该轮询从库):```sqlSELECT*FROMtest_table;```我们可以通过多次执行读操作,观察返回结果的服务器ID(通过`SELECT@@server_id`)来判断是否轮询。测试脚本(Python示例):```pythonimportmysql.connector#写连接(主库)write_conn=mysql.connector.connect(host="localhost",port=6446,user="your_user",#替换为实际的用户,需要有读写权限password="your_password",database="your_database")write_cursor=write_conn.cursor()write_cursor.execute("INSERTINTOtest_table(data)VALUES('testdata')")write_conn.commit()write_cursor.close()write_conn.close()print("Writeoperationcompleted.")#读连接(从库,轮询)foriinrange(4):read_conn=mysql.connector.connect(host="localhost",port=6447,user="your_user",password="your_password",database="your_database")read_cursor=read_conn.cursor()read_cursor.execute("SELECT@@server_id")server_id=read_cursor.fetchone()[0]print(f"Readoperation{i+1}onserver_id:{server_id}")read_cursor.close()read_conn.close()```运行此脚本,应该看到写操作成功,读操作轮询两个从库(显示不同的server_id)。注意事项:1.确保MySQL用户有远程连接权限(创建用户时使用'%'作为主机)。2.确保主从复制正常。3.如果从库是只读的(read_only=1),那么通过读端口执行的写操作会失败,这是符合预期的。、高级配置:自动故障转移上面的配置是静态的,如果主库宕机,Router不会自动切换。为了实现高可用,我们可以结合MySQLGroupReplication(MGR)或者使用Router的元数据缓存功能(需要InnoDBCluster)。但一主两从(非MGR)架构下,Router本身不支持自动故障转移,需要外部机制(如脚本监控)来更新Router的配置。不过,我们可以配置多个主库地址(当有多个候选主库时)并设置路由策略。例如,如果主库宕机,我们手动提升一个从库为主库,然后更新Router的配置文件,重启Router。如果使用InnoDBCluster,则Router可以自动感知集群状态。但本场景是传统主从,所以不展开。六、维护1.更新配置:修改配置文件后,重启Router容器。2.日志查看:进入容器查看/var/log/mysqlrouter下的日志。以上就是MySQLRouter的详细配置和使用过程。注意:在生产环境中,建议将MySQLRouter部署在应用服务器附近(同机房)以减少延迟。§§相关问题§§:1.MySQLRouter如何实现故障转移?需要哪些前提条件?2.在非Docker环境下,如何安装和配置MySQLRouter?3.如何监控MySQLRouter的运行状态和性能?4.MySQLRouter与ProxySQL在读写分离方面有哪些差异?</think>### MySQL Router 详细安装配置使用指南 以下是从零开始配置 MySQL Router 8.0.35 的完整教程,包含安装、配置、测试和故障排除全流程。 --- ### 一、安装 MySQL Router #### 1.1 官方安装方法(Linux) ```bash # Ubuntu/Debian sudo apt update sudo apt install -y mysql-router-community=8.0.35-1ubuntu22.04 # CentOS/RHEL sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm sudo yum install -y mysql-router-community-8.0.35-1.el7 ``` #### 1.2 Docker 容器化安装 ```yaml # docker-compose.yml version: '3.8' services: mysql-router: image: mysql/mysql-router:8.0.35 container_name: mysql-router ports: - "6446:6446" # 写端口 - "6447:6447" # 读端口 - "8443:8443" # REST API volumes: - ./router-config:/etc/mysqlrouter environment: MYSQL_HOST: mysql-master MYSQL_PORT: 3306 MYSQL_USER: root MYSQL_PASSWORD: masterpass networks: - mysql-net ``` --- ### 二、配置 MySQL Router #### 2.1 基础配置文件 (`mysqlrouter.conf`) ```ini [DEFAULT] logging_folder = /var/log/mysqlrouter runtime_folder = /var/run/mysqlrouter config_folder = /etc/mysqlrouter data_folder = /var/lib/mysqlrouter [logger] level = INFO # 主库写路由 [routing:primary] bind_address = 0.0.0.0 bind_port = 6446 destinations = mysql-master:3306 routing_strategy = first-available protocol = classic # 从库读路由 [routing:replicas] bind_address = 0.0.0.0 bind_port = 6447 destinations = mysql-slave1:3306,mysql-slave2:3306 routing_strategy = round-robin protocol = classic # REST API 监控 [http_server] bind_address = 0.0.0.0 port = 8443 ``` #### 2.2 高级路由策略 ```ini # 故障转移配置 [routing:failover] bind_port = 6448 destinations = mysql-master:3306,mysql-slave1:3306?role=PRIMARY routing_strategy = round-robin-with-fallback # 连接池管理 [connection_pool] max_idle_server_connections = 30 idle_timeout = 300 # 健康检查 [health_check] interval = 10 timeout = 3 ``` --- ### 三、初始化 MySQL Router #### 3.1 首次启动配置 ```bash # 生成初始配置 mysqlrouter --bootstrap root@mysql-master:3306 \ --directory /etc/mysqlrouter \ --conf-use-sockets \ --user=mysqlrouter \ --account-create if_not_exists # 启动服务 (Linux) sudo systemctl start mysqlrouter # Docker 容器启动 docker run -d --name mysql-router \ -p 6446:6446 -p 6447:6447 \ -v $(pwd)/router-config:/etc/mysqlrouter \ mysql/mysql-router:8.0.35 ``` #### 3.2 验证配置 ```bash # 检查运行状态 mysqlrouter --config /etc/mysqlrouter/mysqlrouter.conf --status # 查看配置摘要 mysqlrouter --config /etc/mysqlrouter/mysqlrouter.conf --extra-config=dump_config ``` --- ### 四、主从集群准备 #### 4.1 创建路由用户 ```sql -- 在主库执行 CREATE USER 'router_user'@'%' IDENTIFIED BY 'RouterPass123!'; GRANT SELECT ON mysql_innodb_cluster_metadata.* TO 'router_user'@'%'; GRANT SELECT ON performance_schema.global_variables TO 'router_user'@'%'; GRANT SELECT ON performance_schema.replication_group_members TO 'router_user'@'%'; GRANT SELECT ON performance_schema.replication_group_member_stats TO 'router_user'@'%'; ``` #### 4.2 配置主从复制 ```sql -- 主库 CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='replicator', MASTER_PASSWORD='replpass', MASTER_AUTO_POSITION=1 FOR CHANNEL 'group_replication_applier'; -- 从库 START SLAVE; ``` --- ### 、使用 MySQL Router #### 5.1 应用连接配置 ```python # Python 示例 import mysql.connector # 写操作连接 (主库) write_conn = mysql.connector.connect( host="localhost", port=6446, user="app_user", password="AppPass123!", database="app_db" ) # 读操作连接 (从库) read_conn = mysql.connector.connect( host="localhost", port=6447, user="app_user", password="AppPass123!", database="app_db" ) ``` #### 5.2 自动路由测试脚本 ```python import mysql.connector import time def test_router(port, operation): try: conn = mysql.connector.connect( host="127.0.0.1", port=port, user="app_user", password="AppPass123!", database="app_db" ) cursor = conn.cursor() if operation == "write": cursor.execute("INSERT INTO test_table (data) VALUES ('test_data')") conn.commit() print(f"✅ 写操作成功 (端口: {port})") return True elif operation == "read": cursor.execute("SELECT @@server_id") server_id = cursor.fetchone()[0] print(f"🔍 读操作 (端口: {port}) - 服务器ID: {server_id}") return server_id except mysql.connector.Error as err: print(f"❌ 操作失败 (端口: {port}): {err}") return False finally: if 'conn' in locals() and conn.is_connected(): conn.close() # 测试写操作 print("=== 测试写路由 ===") test_router(6446, "write") # 应成功 test_router(6447, "write") # 应失败 # 测试读负载均衡 print("\n=== 测试读负载均衡 ===") servers = set() for i in range(10): server_id = test_router(6447, "read") if server_id: servers.add(server_id) time.sleep(0.5) print(f"\n负载均衡服务器ID集合: {servers}") ``` --- ### 六、监控与管理 #### 6.1 REST API 监控 ```bash # 获取路由状态 curl -s http://localhost:8443/routes | jq # 输出示例: [ { "activeConnections": 12, "destination": "mysql-master:3306", "type": "read-write" }, { "activeConnections": 8, "destination": "mysql-slave1:3306", "type": "read-only" }, { "activeConnections": 9, "destination": "mysql-slave2:3306", "type": "read-only" } ] ``` #### 6.2 日志分析 ```bash # 查看实时日志 tail -f /var/log/mysqlrouter/mysqlrouter.log # 常见日志信息解读 INFO [routing] Started: 0.0.0.0:6446 -> mysql-master:3306 (read-write) WARNING [routing] Destination mysql-slave2:3306 unavailable: MySQL Error 2003 NOTICE [routing] Reconnected to mysql-slave2:3306 after 3 attempts ``` --- ### 七、故障排除 #### 7.1 常见问题解决 **问题1:认证失败** ```log ERROR [routing] Authentication error: Access denied for user 'router_user'@'172.18.0.5' ``` **解决:** ```sql -- 在主库执行 ALTER USER 'router_user'@'%' IDENTIFIED WITH mysql_native_password BY 'RouterPass123!'; FLUSH PRIVILEGES; ``` **问题2:连接超时** ```log WARNING [routing] Destination mysql-slave1:3306 unavailable: Connect timeout ``` **解决:** 1. 检查网络连通性:`docker exec mysql-router nc -zv mysql-slave1 3306` 2. 增加超时设置: ```ini [routing:replicas] connect_timeout = 10 ``` **问题3:只读错误** ```log ERROR 1290 (HY000): The MySQL server is running with the --read-only option ``` **解决:** 确保写操作使用6446端口 --- ### 八、生产环境最佳实践 #### 8.1 高可用部署 ```yaml # docker-compose-ha.yml services: mysql-router1: image: mysql/mysql-router:8.0.35 ports: ["6446:6446", "6447:6447"] deploy: replicas: 3 placement: constraints: [node.role == worker] mysql-router2: image: mysql/mysql-router:8.0.35 ports: ["7446:6446", "7447:6447"] deploy: replicas: 3 ``` #### 8.2 安全加固 ```ini # SSL 配置 [ssl] mode = REQUIRED tls_version = TLSv1.3 cipher = TLS_AES_256_GCM_SHA384 # 防火墙规则 [firewall] allow = 192.168.1.0/24 deny = all ``` #### 8.3 自动配置更新 ```bash #!/bin/bash # auto_reconfig.sh NEW_MASTER=$(find_new_master) # 自定义函数发现新主库 mysqlrouter --set-option \ --section=routing:primary \ --option=destinations \ --value="$NEW_MASTER:3306" \ --config /etc/mysqlrouter/mysqlrouter.conf systemctl reload mysqlrouter ``` --- ### 九、与常见中间件对比 | 特性 | MySQL Router | ProxySQL | HAProxy | |------------------|--------------|----------|---------| | 开发团队 | Oracle | 社区 | 社区 | | 读写分离 | ✅ | ✅ | ❌ | | 自动故障转移 | ✅ | ✅ | ❌ | | 配置复杂度 | 简单 | 中等 | 简单 | | 协议兼容性 | 原生MySQL | 高 | TCP层 | | 动态重新配置 | ✅ | ✅ | ❌ | | 内置监控 | ✅ | ✅ | ❌ | | 连接池 | ✅ | ✅ | ❌ | --- ### 十、完整测试流程 ```bash # 1. 启动集群 docker-compose up -d # 2. 初始化路由 docker exec mysql-router mysqlrouter --bootstrap \ root:masterpass@mysql-master:3306 \ --user=mysqlrouter \ --directory /etc/mysqlrouter # 3. 创建测试数据 docker exec mysql-master mysql -uroot -pmasterpass -e \ "CREATE DATABASE testdb; USE testdb; \ CREATE TABLE data (id INT AUTO_INCREMENT PRIMARY KEY, value TEXT);" # 4. 执行路由测试 python3 router_test.py # 5. 模拟主库故障 docker stop mysql-master # 6. 验证故障转移 python3 failover_test.py # 7. 恢复主库 docker start mysql-master # 8. 验证自动恢复 python3 recovery_test.py ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值