【Mysql】Mysql从frm文件里恢复表结构

磁盘损坏,只剩下frm以及ibd文件了,如何从frm恢复表结构呢?
使用mysqlfrm 去官网 http://dev.mysql.com/downloads/utilities/   下载mysql-connector-python 以及mysql-utilities工具

mysqlfrm 是一个恢复性质的工具,用来读取.frm文件并从该文件中找到表定义数据生成CREATE语句。在大多数情况下,生成的CREATE语句用于在另一个服务器上创建表或进行诊断等。然而,有些功能是不保存在.frm文件中的,因此这些功能将被忽略的。如:

  • 外键约束
  • 自增长序列

mysqlfrm 有两种操作模式。

  1. 默认的模式是再生个实例,使用--basedir选项或指定--server选项来连接到已经安装的实例。这种过程不会改变原始的.frm文件。该模式也需要指定--port选项来给再生的实例使用,该端口不能与现有的实例冲突。在读取.frm文件后,再生的实例将被关闭,所有的临时文件将被删除的。
  2. 另一个模式是诊断模式,需要指定 --diagnostic 选项。byte-by-byte读取.frm文件 尽可能多的恢复信息。该模式有更多的局限性,不能校验字符集。


当使用默认模式无法读取文件或者该服务器上没有安装MySQL实例就使用诊断模式。

需要指定.frm文件的路径,也可以指定一个目录,该目录下的所有.frm文件将被读取。

可以指定数据库名称用来产生CREATE语句,格式如下:database_name:table_name.frm,如:oltp:t1.frm,可选的数据库名称也可以使用路径,如 /home/me/oltp:t1.frm,将使用oltp作为数据库名。如果省略了数据库名称和路径,最后的一个文件夹将作为数据库名称的。如 /home/me/data1/t1.frm,data1将作为数据库名。如果不想最后的文件夹作为数据库名,只需指定冒号,如 /home/me/data1/:t1.frm,在这种情况下,CREATE语句将忽略数据库。

 

注意

1. 某些引擎表在默认模式下不可读取的。如PARTITION, PERFORMANCE_SCHEMA,必需在诊断模式下可读。

2. 要在创建语句中改变存储引擎,可使用--new-storage-engine 选项。如果有指定该选项,同时必须指定--frmdir选项,该工具生成新的.frm文件,前缀为new_,并保存在--frmdir目录下。

3. 关掉所有信息除了CREATE 语句和警告或错误信息,使用--quiet选项。

4. 使用--show-stats 选项统计每个.frm文件信息。

5. 使用--user 选项指定再生的实例以哪个权限运行。

6. 如果再生的实例超过10秒启动,需调大--start-timeout 选项参数。



例子:
  1. [root@sh242 ~]# mysqlfrm --basedir=/home/data/mysql  /home/data/mydata/3307/test/DB2:b_orders.frm --port=3307  --user=root
    # Spawning server with --user=root.
    # Starting the spawned server on port 3307 ... done.
    # Reading .frm files
    #
    # Reading the b_orders.frm file.
    #
    # CREATE statement for /home/data/mydata/3307/test/b_orders.frm:
    #


    CREATE TABLE `DB2`.`b_orders` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `c_id` bigint(20) unsigned DEFAULT '0' COMMENT 'C端订单id',
      `username` char(32) NOT NULL COMMENT '姓名',
      `mobile` char(32) NOT NULL COMMENT '手机号码',
      `iden_card` varchar(20) DEFAULT NULL COMMENT '身份证号',
      `birth` char(6) DEFAULT NULL COMMENT '格式:198005',
      `zone_id` int(10) unsigned DEFAULT NULL COMMENT '城市ID',
      `gsd_zone_id` int(10) unsigned NOT NULL COMMENT '归属地',
      `money` decimal(10,2) unsigned DEFAULT NULL COMMENT '申请额度',
      `month` smallint(5) unsigned DEFAULT NULL COMMENT '贷款期限',
      `use_company` tinyint(2) DEFAULT NULL COMMENT '贷款用途/企业类型(1-12/1-9)',
      `marriage` tinyint(1) DEFAULT NULL COMMENT '婚姻状况(1未婚,2已婚)',
      `credit_card` tinyint(1) DEFAULT NULL COMMENT '信用卡(1无,2有)',
      `house_type` tinyint(2) DEFAULT NULL COMMENT '房产(1-6)',
      `car_type` tinyint(1) DEFAULT NULL COMMENT '车产(1无车产,2有车产无抵押,3有车产已抵押)',
      `profession` tinyint(1) DEFAULT NULL COMMENT '职业身份(1-5)',
      `work_license` int(10) unsigned DEFAULT NULL COMMENT '工作时间/营业执照(1-4/1-5))',
      `salary_bank_private` int(10) DEFAULT NULL COMMENT '工资发放形式/银行对私流水(1-4/1-10)',
      `salary_bank_public` int(10) DEFAULT NULL COMMENT '工资收入/银行对公流水(1-11/1-10)',
      `is_fund` tinyint(1) DEFAULT NULL COMMENT '公积金(1无2有)',
      `is_security` tinyint(1) DEFAULT NULL COMMENT '社保(1无2有)',
      `type` tinyint(3) unsigned DEFAULT '0' COMMENT '1个人2企业',
      `industry` tinyint(3) DEFAULT NULL COMMENT '公司行业(1-18)',
      `has_loan` tinyint(1) DEFAULT NULL COMMENT '有无贷款成功记录(1无2有)',
      `has_debt` tinyint(1) DEFAULT NULL COMMENT '负债情况(1无,2有)',
      `issue` tinyint(3) unsigned DEFAULT '0' COMMENT '贷款人问题',
      `iscomment` varchar(100) DEFAULT '0' COMMENT '评价内容',
      `com_type` tinyint(1) DEFAULT '0' COMMENT '是否已未点评推送',
      `xdy_id` bigint(20) unsigned DEFAULT '0' COMMENT '购买信贷员ID',
      `c_time` int(11) DEFAULT '0' COMMENT '购买时间',
      `u_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
      `status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '处理状态:0,未处理;1,电联;2,备注  ',
      `del_status` tinyint(3) NOT NULL DEFAULT '1' COMMENT '数据状态 1为正常 2为物理删除',
      `letter` char(1) DEFAULT NULL COMMENT '姓名首字母',
      `b_c_type` tinyint(3) unsigned DEFAULT '1' COMMENT '1 c 2 b',
      PRIMARY KEY (`id`),
      UNIQUE KEY `c_id` (`c_id`) USING BTREE,
      UNIQUE KEY `mobile_xdy_type` (`mobile`,`xdy_id`,`b_c_type`),
      KEY `xdy_id` (`xdy_id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抢单表'


    #...done.

更详细 -vvv
[root@sh242 ~]# mysqlfrm --basedir=/home/data/mysql  /home/data/mydata/3307/test/DB2:b_orders.frm --port=3307  --user=root -vvv
# Checking read access to .frm files 
# Creating a temporary datadir = /tmp/tmpZZNej7
# Spawning server with --user=root.
# Starting the spawned server on port 3307 ...
# Cloning the MySQL server located at /home/data/mysql.
# Configuring new instance...
# Locating mysql tools...
# Location of files:
#                       mysqld: /home/data/mysql/bin/mysqld
#                   mysqladmin: /home/data/mysql/bin/mysqladmin
#      mysql_system_tables.sql: /home/data/mysql/share/mysql_system_tables.sql
# mysql_system_tables_data.sql: /home/data/mysql/share/mysql_system_tables_data.sql
# mysql_test_data_timezone.sql: /home/data/mysql/share/mysql_test_data_timezone.sql
#         fill_help_tables.sql: /home/data/mysql/share/fill_help_tables.sql
# Setting up empty database and mysql tables...
2016-05-05 10:52:18 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-05-05 10:52:18 0 [Note] /home/data/mysql/bin/mysqld (mysqld 5.6.24) starting as process 20121 ...
2016-05-05 10:52:18 20121 [Note] Plugin 'FEDERATED' is disabled.
2016-05-05 10:52:18 20121 [Note] InnoDB: Using atomics to ref count buffer pool pages
2016-05-05 10:52:18 20121 [Note] InnoDB: The InnoDB memory heap is disabled
2016-05-05 10:52:18 20121 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-05-05 10:52:18 20121 [Note] InnoDB: Memory barrier is not used
2016-05-05 10:52:18 20121 [Note] InnoDB: Compressed tables use zlib 1.2.3
2016-05-05 10:52:18 20121 [Note] InnoDB: Using Linux native AIO
2016-05-05 10:52:18 20121 [Note] InnoDB: Using CPU crc32 instructions
2016-05-05 10:52:18 20121 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-05-05 10:52:18 20121 [Note] InnoDB: Completed initialization of buffer pool
2016-05-05 10:52:18 20121 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2016-05-05 10:52:18 20121 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2016-05-05 10:52:18 20121 [Note] InnoDB: Database physically writes the file full: wait...
2016-05-05 10:52:18 20121 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2016-05-05 10:52:18 20121 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2016-05-05 10:52:19 20121 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2016-05-05 10:52:19 20121 [Warning] InnoDB: New log files created, LSN=45781
2016-05-05 10:52:19 20121 [Note] InnoDB: Doublewrite buffer not found: creating new
2016-05-05 10:52:19 20121 [Note] InnoDB: Doublewrite buffer created
2016-05-05 10:52:19 20121 [Note] InnoDB: 128 rollback segment(s) are active.
2016-05-05 10:52:19 20121 [Warning] InnoDB: Creating foreign key constraint system tables.
2016-05-05 10:52:19 20121 [Note] InnoDB: Foreign key constraint system tables created
2016-05-05 10:52:19 20121 [Note] InnoDB: Creating tablespace and datafile system tables.
2016-05-05 10:52:19 20121 [Note] InnoDB: Tablespace and datafile system tables created.
2016-05-05 10:52:19 20121 [Note] InnoDB: Waiting for purge to start
2016-05-05 10:52:19 20121 [Note] InnoDB: 5.6.24 started; log sequence number 0
2016-05-05 10:52:19 20121 [Note] Binlog end
2016-05-05 10:52:19 20121 [Note] InnoDB: FTS optimize thread exiting.
2016-05-05 10:52:19 20121 [Note] InnoDB: Starting shutdown...
2016-05-05 10:52:21 20121 [Note] InnoDB: Shutdown completed; log sequence number 1625977
# Starting new instance of the server...
# Startup command for new server:
/home/data/mysql/bin/mysqld --no-defaults --basedir=/home/data/mysql --datadir=/tmp/tmpZZNej7 --pid-file=/tmp/tmpZZNej7/clone.pid --port=3307 --server-id=101 --socket=/tmp/tmpZZNej7/mysql.sock --tmpdir=/tmp/tmpZZNej7 --user=root
# Testing connection to new instance...
# trying again...
2016-05-05 10:52:22 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-05-05 10:52:22 0 [Note] /home/data/mysql/bin/mysqld (mysqld 5.6.24) starting as process 20143 ...
2016-05-05 10:52:22 20143 [Note] Plugin 'FEDERATED' is disabled.
2016-05-05 10:52:22 20143 [Note] InnoDB: Using atomics to ref count buffer pool pages
2016-05-05 10:52:22 20143 [Note] InnoDB: The InnoDB memory heap is disabled
2016-05-05 10:52:22 20143 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-05-05 10:52:22 20143 [Note] InnoDB: Memory barrier is not used
2016-05-05 10:52:22 20143 [Note] InnoDB: Compressed tables use zlib 1.2.3
2016-05-05 10:52:22 20143 [Note] InnoDB: Using Linux native AIO
2016-05-05 10:52:22 20143 [Note] InnoDB: Using CPU crc32 instructions
2016-05-05 10:52:22 20143 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-05-05 10:52:22 20143 [Note] InnoDB: Completed initialization of buffer pool
2016-05-05 10:52:22 20143 [Note] InnoDB: Highest supported file format is Barracuda.
2016-05-05 10:52:22 20143 [Note] InnoDB: 128 rollback segment(s) are active.
2016-05-05 10:52:22 20143 [Note] InnoDB: Waiting for purge to start
2016-05-05 10:52:22 20143 [Note] InnoDB: 5.6.24 started; log sequence number 1625977
2016-05-05 10:52:23 20143 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 644e3d5d-126c-11e6-8afe-00163e5587cf.
2016-05-05 10:52:23 20143 [Note] Server hostname (bind-address): '*'; port: 3307
2016-05-05 10:52:23 20143 [Note] IPv6 is not available.
2016-05-05 10:52:23 20143 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
2016-05-05 10:52:23 20143 [Note] Server socket created on IP: '0.0.0.0'.
2016-05-05 10:52:23 20143 [Note] Event Scheduler: Loaded 0 events
2016-05-05 10:52:23 20143 [Note] /home/data/mysql/bin/mysqld: ready for connections.
Version: '5.6.24'  socket: '/tmp/tmpZZNej7/mysql.sock'  port: 3307  Source distribution
# trying again...
# Success!
# Setting the root password...
Warning: Using a password on the command line interface can be insecure.
# Connection Information:
#  -uroot -proot --socket=/tmp/tmpZZNej7/mysql.sock
#...done.
# Connecting to spawned server
done.
# Reading .frm files
#
# Reading the b_orders.frm file.
# Changing engine for .frm file /tmp/tmpZZNej7/DB2_temp/b_orders.frm:
# Skipping to header at : 2
# General Data from .frm file:
{'IO_SIZE': 4096,
 'MYSQL_VERSION_ID': 50624,
 'avg_row_length': 0,
 'charset_low': 0,
 'create_options': 9,
 'db_create_pack': 2,
 'default_charset': 33,
 'default_part_eng': 0,
 'extra_size': 60,
 'frm_file_ver': 5,
 'frm_version': 10,
 'key_block_size': 0,
 'key_info_length': 130,
 'key_length': 1396,
 'legacy_db_type': 'INNODB',
 'length': 12288,
 'max_rows': 0,
 'min_rows': 0,
 'rec_length': 656,
 'row_type': 0,
 'table_charset': 33,
 'tmp_key_length': 1396}
# Engine string: InnoDB
# Server version in file: 5.6.24
#
# CREATE statement for /home/data/mydata/3307/test/b_orders.frm:
#


CREATE TABLE `DB2`.`b_orders` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `c_id` bigint(20) unsigned DEFAULT '0' COMMENT 'C端订单id',
  `username` char(32) NOT NULL COMMENT '姓名',
  `mobile` char(32) NOT NULL COMMENT '手机号码',
  `iden_card` varchar(20) DEFAULT NULL COMMENT '身份证号',
  `birth` char(6) DEFAULT NULL COMMENT '格式:198005',
  `zone_id` int(10) unsigned DEFAULT NULL COMMENT '城市ID',
  `gsd_zone_id` int(10) unsigned NOT NULL COMMENT '归属地',
  `money` decimal(10,2) unsigned DEFAULT NULL COMMENT '申请额度',
  `month` smallint(5) unsigned DEFAULT NULL COMMENT '贷款期限',
  `use_company` tinyint(2) DEFAULT NULL COMMENT '贷款用途/企业类型(1-12/1-9)',
  `marriage` tinyint(1) DEFAULT NULL COMMENT '婚姻状况(1未婚,2已婚)',
  `credit_card` tinyint(1) DEFAULT NULL COMMENT '信用卡(1无,2有)',
  `house_type` tinyint(2) DEFAULT NULL COMMENT '房产(1-6)',
  `car_type` tinyint(1) DEFAULT NULL COMMENT '车产(1无车产,2有车产无抵押,3有车产已抵押)',
  `profession` tinyint(1) DEFAULT NULL COMMENT '职业身份(1-5)',
  `work_license` int(10) unsigned DEFAULT NULL COMMENT '工作时间/营业执照(1-4/1-5))',
  `salary_bank_private` int(10) DEFAULT NULL COMMENT '工资发放形式/银行对私流水(1-4/1-10)',
  `salary_bank_public` int(10) DEFAULT NULL COMMENT '工资收入/银行对公流水(1-11/1-10)',
  `is_fund` tinyint(1) DEFAULT NULL COMMENT '公积金(1无2有)',
  `is_security` tinyint(1) DEFAULT NULL COMMENT '社保(1无2有)',
  `type` tinyint(3) unsigned DEFAULT '0' COMMENT '1个人2企业',
  `industry` tinyint(3) DEFAULT NULL COMMENT '公司行业(1-18)',
  `has_loan` tinyint(1) DEFAULT NULL COMMENT '有无贷款成功记录(1无2有)',
  `has_debt` tinyint(1) DEFAULT NULL COMMENT '负债情况(1无,2有)',
  `issue` tinyint(3) unsigned DEFAULT '0' COMMENT '贷款人问题',
  `iscomment` varchar(100) DEFAULT '0' COMMENT '评价内容',
  `com_type` tinyint(1) DEFAULT '0' COMMENT '是否已未点评推送',
  `xdy_id` bigint(20) unsigned DEFAULT '0' COMMENT '购买信贷员ID',
  `c_time` int(11) DEFAULT '0' COMMENT '购买时间',
  `u_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '处理状态:0,未处理;1,电联;2,备注  ',
  `del_status` tinyint(3) NOT NULL DEFAULT '1' COMMENT '数据状态 1为正常 2为物理删除',
  `letter` char(1) DEFAULT NULL COMMENT '姓名首字母',
  `b_c_type` tinyint(3) unsigned DEFAULT '1' COMMENT '1 c 2 b',
  PRIMARY KEY (`id`),
  UNIQUE KEY `c_id` (`c_id`) USING BTREE,
  UNIQUE KEY `mobile_xdy_type` (`mobile`,`xdy_id`,`b_c_type`),
  KEY `xdy_id` (`xdy_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抢单表'


# Shutting down spawned server
# Removing the temporary datadir
2016-05-05 10:52:24 20143 [Note] /home/data/mysql/bin/mysqld: Normal shutdown


#...done.


诊断模式:
[root@sh242 ~]# mysqlfrm --diagnostic /home/data/mydata/3307/test/b_orders.frm  【-vvv】
# WARNING: Cannot generate character set or collation names without the --server option.
# CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.
# Reading .frm file for /home/data/mydata/3307/test/b_orders.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:


CREATE TABLE `test`.`b_orders` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
  `c_id` bigint(20) unsigned DEFAULT NULL comment 'C端订单id', 
  `username` char(96) NOT NULL comment '姓名', 
  `mobile` char(96) NOT NULL comment '手机号码', 
  `iden_card` varchar(60) DEFAULT NULL comment '身份证号', 
  `birth` char(18) DEFAULT NULL comment '格式:198005', 
  `zone_id` int(10) unsigned DEFAULT NULL comment '城市ID', 
  `gsd_zone_id` int(10) unsigned NOT NULL comment '归属地', 
  `money` decimal(10,2) unsigned DEFAULT NULL comment '申请额度', 
  `month` smallint(5) unsigned DEFAULT NULL comment '贷款期限', 
  `use_company` tinyint(2) DEFAULT NULL comment '贷款用途/企业类型(1-12/1-9)', 
  `marriage` tinyint(1) DEFAULT NULL comment '婚姻状况(1未婚,2已婚)', 
  `credit_card` tinyint(1) DEFAULT NULL comment '信用卡(1无,2有)', 
  `house_type` tinyint(2) DEFAULT NULL comment '房产(1-6)', 
  `car_type` tinyint(1) DEFAULT NULL comment '车产(1无车产,2有车产无抵押,3有车产已抵押)', 
  `profession` tinyint(1) DEFAULT NULL comment '职业身份(1-5)', 
  `work_license` int(10) unsigned DEFAULT NULL comment '工作时间/营业执照(1-4/1-5))', 
  `salary_bank_private` int(10) DEFAULT NULL comment '工资发放形式/银行对私流水(1-4/1-10)', 
  `salary_bank_public` int(10) DEFAULT NULL comment '工资收入/银行对公流水(1-11/1-10)', 
  `is_fund` tinyint(1) DEFAULT NULL comment '公积金(1无2有)', 
  `is_security` tinyint(1) DEFAULT NULL comment '社保(1无2有)', 
  `type` tinyint(3) unsigned DEFAULT NULL comment '1个人2企业', 
  `industry` tinyint(3) DEFAULT NULL comment '公司行业(1-18)', 
  `has_loan` tinyint(1) DEFAULT NULL comment '有无贷款成功记录(1无2有)', 
  `has_debt` tinyint(1) DEFAULT NULL comment '负债情况(1无,2有)', 
  `issue` tinyint(3) unsigned DEFAULT NULL comment '贷款人问题', 
  `iscomment` varchar(300) DEFAULT NULL comment '评价内容', 
  `com_type` tinyint(1) DEFAULT NULL comment '是否已未点评推送', 
  `xdy_id` bigint(20) unsigned DEFAULT NULL comment '购买信贷员ID', 
  `c_time` int(11) DEFAULT NULL comment '购买时间', 
  `u_time` timestamp DEFAULT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间', 
  `status` tinyint(3) unsigned NOT NULL comment '处理状态:0,未处理;1,电联;2,备注  ', 
  `del_status` tinyint(3) NOT NULL comment '数据状态 1为正常 2为物理删除', 
  `letter` char(3) DEFAULT NULL comment '姓名首字母', 
  `b_c_type` tinyint(3) unsigned DEFAULT NULL comment '1 c 2 b', 
PRIMARY KEY `PRIMARY` (`id`),
UNIQUE KEY `c_id` (`c_id`) USING BTREE,
UNIQUE KEY `mobile_xdy_type` (`mobile`,`xdy_id`,`b_c_type`),
KEY `xdy_id` (`xdy_id`) USING BTREE
) ENGINE=InnoDB COMMENT '抢单表';


#...done.

参考文档:
http://www.ttlsa.com/mysql/mysql-utilities-mysqlfrm/
http://www.parnassusdata.com/zh-hans/node/360
http://www.askmaclean.com/archives/mysql-recover-innodb.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-2093664/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29096438/viewspace-2093664/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值