暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

某公共系统数据还原到达梦I系列一体机实战演示

377

前置条件及考虑因素

1、通过自动脚本定制化部署主备集群;
2、数据体量和磁盘空间匹配度;
3、合理利用资源(应用并行和压缩技术)。

主要步骤

1、关闭主备;
2、将原备份好的备份集(达梦其他更低版本的)还原到主库;
3、先启动主库到open,再关闭主库并备份;
4、将备份集传到备库并且还原备库;
5、主备都启动到mount状态设置OGUID和db角色;
6、检查主备守护进程配置文件dmwatcher.ini;
7、启动主库守护进程;
8、启动主备集群监视器;
9、建表插入一行数据验证。

1.关闭主备的顺序

a、首选退出监视器dmmonitor及关闭备库守护进程;
b、再关闭主库的守护进程及主库;
c、最后关闭备库。

#1、退出监视器 [root@PAI-I-01 ~]# su - dmdba Last login: Wed Mar 8 13:53:51 CST 2023 on pts/0 [dmdba@PAI-I-01 ~]$ cd /dm/bin [dmdba@PAI-I-01 bin]$ ./dmmonitor /dmdata/PROD/dmmonitor.ini [monitor] 2023-03-09 09:49:43: DMMONITOR[4.0] V8 [monitor] 2023-03-09 09:49:43: DMMONITOR[4.0] IS READY. [monitor] 2023-03-09 09:49:44: Received message from(PROD_MASTER) WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-03-09 09:49:43 OPEN OK PROD_MASTER OPEN PRIMARY VALID 47 18195008047 18195008047 [monitor] 2023-03-09 09:49:44: Received message from(PROD_STBY0) WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-03-09 09:49:59 OPEN OK PROD_STBY0 OPEN STANDBY VALID 47 18195008045 18195008045 show 2023-03-09 09:49:47 #================================================================================# GROUP OGUID MON_CONFIRM MODE MPP_FLAG GRP1 2023010401 TRUE AUTO FALSE <<DATABASE GLOBAL INFO:>> DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 10.10.10.145 11316 2023-03-09 09:49:46 GLOBAL VALID OPEN PROD_MASTER OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID EP INFO: INST_IP INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG 192.168.111.145 11236 OK PROD_MASTER OPEN PRIMARY 0 0 REALTIME VALID 38297568 18195008048 38297568 18195008048 NONE <<DATABASE GLOBAL INFO:>> DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 10.10.10.146 11317 2023-03-09 09:50:02 GLOBAL VALID OPEN PROD_STBY0 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID EP INFO: INST_IP INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG 192.168.111.146 11236 OK PROD_STBY0 OPEN STANDBY 0 0 REALTIME VALID 37610426 18195008046 37610426 18195008046 NONE DATABASE(PROD_STBY0) APPLY INFO FROM (PROD_MASTER), REDOS_PARALLEL_NUM (1): DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[38297566, 38297566, 38297567], (RLSN, SLSN, KLSN)[18195008046, 18195008046, 18195008047], N_TSK[0], TSK_MEM_USE[512] REDO_LSN_ARR: (18195008046) #================================================================================# exit #2、关闭备库守护进程 [dmdba@PAI-I-02 bin]$ ./DmWatcherServicePROD status DmWatcherServicePROD (pid 644242) is running. [dmdba@PAI-I-02 bin]$ ./DmWatcherServicePROD stop Stopping DmWatcherServicePROD: [ OK ] [dmdba@PAI-I-02 bin]$ ./DmWatcherServicePROD status DmWatcherServicePROD is stopped #3、关闭主库守护进程 [dmdba@PAI-I-01 bin]$ ./DmWatcherServicePROD status DmWatcherServicePROD (pid 644242) is running. [dmdba@PAI-I-01 bin]$ ./DmWatcherServicePROD stop Stopping DmWatcherServicePROD: [ OK ] [dmdba@PAI-I-01 bin]$ ./DmWatcherServicePROD status DmWatcherServicePROD is stopped #4、关闭主库(disql工具shutdown或通过服务关闭) [dmdba@PAI-I-01 bin]$ ./DmServicePROD status DmServicePROD (pid 644062) is running. [dmdba@PAI-I-01 bin]$ ./DmServicePROD stop DmServicePROD (pid 644062) is stopped. [dmdba@PAI-I-01 bin]$ ./DmServicePROD status DmServicePROD is stopped #关闭备库 [dmdba@PAI-I-02 bin]$ ./DmServicePROD status DmServicePROD (pid 644066) is running. [dmdba@PAI-I-02 bin]$ ./DmServicePROD stop DmServicePROD (pid 644066) is stopped. [dmdba@PAI-I-02 bin]$ ./DmServicePROD status DmServicePROD is stopped

2.脱机还原主库

#三部曲 [dmdba@PAI-I-01 bin]$ ./dmrman dmrman V8 RMAN> restore database '/dmdata/PROD/dm.ini' from backupset '/opt/202303016_dwsd'; restore database '/dmdata/PROD/dm.ini' from backupset '/opt/202303016_dwsd'; file dm.key not found, use default license! Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL [Percent:100.00%][Speed:0.00M/s][Cost:00:42:02][Remaining:00:00:00] restore successfully. time used: 00:42:02.937 RMAN> recover database '/dmdata/PROD/dm.ini' from backupset '/opt/202303016_dwsd'; recover database '/dmdata/PROD/dm.ini' from backupset '/opt/202303016_dwsd'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[18159832222], file_lsn[18159832222] no log generates while the backupset [/opt/202303016_dwsd] created recover successfully! time used: 351.378(ms) RMAN> recover database '/dmdata/PROD/dm.ini' update db_magic recover database '/dmdata/PROD/dm.ini' update db_magic Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[18159832222], file_lsn[18159832222] recover successfully! time used: 00:00:01.038

3.先启动主库到open,再关闭主库做脱机全备

[dmdba@PAI-I-01 bin]$ ./DmServicePROD start Starting DmServicePROD: [ OK ] [dmdba@PAI-I-01 bin]$ ./DmServicePROD status DmServicePROD (pid 58133) is running. [dmdba@PAI-I-01 bin]$ ./DmServicePROD stop Stopping DmServicePROD: [ OK ] [dmdba@PAI-I-01 bin]$ ./DmServicePROD status DmServicePROD is stopped #主库进行脱机全备 ```shell RMAN> backup database '/dmdata/PROD/dm.ini' backupset '/dmdata/bakfull_dwsd' DEVICE TYPE disk BACKUPINFO '完全备份' MAXPIECESIZE 131072 COMPRESSED LEVEL 5 PARALLEL 32; backup database '/dmdata/PROD/dm.ini' backupset '/dmdata/bakfull_dwsd' DEVICE TYPE disk BACKUPINFO '完全备份' MAXPIECESIZE 131072 COMPRESSED LEVEL 5 PARALLEL 32; file dm.key not found, use default license! Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[18159884394], file_lsn[18159884394] Processing backupset /dmdata/bakfull_dwsd [Percent:97.82%][Speed:0.00M/s][Cost:00:30:46][Remaining:00:00:42] backup successfully! time used: 00:30:47.749 [dmdba@PAI-I-01 dmdata]$ du -sh * 734G bakfull_dwsd

4.将主库备份集拷贝到备库

[dmdba@PAI-I-01 dmdata]$ scp -r bakfull_dwsd/ root@192.168.111.146:/dmdata Authorized users only. All activities may be monitored and reported. root@192.168.111.146's password: bakfull_dwsd_1.bak 100% 23GB 368.1MB/s 01:04 bakfull_dwsd_1.meta 100% 473KB 229.1MB/s 00:00 bakfull_dwsd_0.bak 100% 23GB 393.1MB/s 00:59 bakfull_dwsd_0.meta 100% 457KB 205.1MB/s 00:00 bakfull_dwsd_2.bak 100% 23GB 362.3MB/s 01:04 bakfull_dwsd_2.meta 100% 465KB 232.0MB/s 00:00 bakfull_dwsd_5.bak 100% 23GB 382.6MB/s 01:02 bakfull_dwsd_5.meta 100% 473KB 237.7MB/s 00:00 bakfull_dwsd_18.bak 100% 22GB 376.4MB/s 01:01 bakfull_dwsd_18.meta 100% 437KB 216.6MB/s 00:00 bakfull_dwsd_14.bak 100% 23GB 357.6MB/s 01:05 bakfull_dwsd_14.meta 100% 457KB 184.3MB/s 00:00 bakfull_dwsd_3.bak 100% 23GB 351.8MB/s 01:07 bakfull_dwsd_3.meta 100% 493KB 191.8MB/s 00:00 bakfull_dwsd_17.bak 100% 23GB 337.9MB/s 01:08 bakfull_dwsd_17.meta 100% 457KB 217.1MB/s 00:00 bakfull_dwsd_21.bak 100% 23GB 335.1MB/s 01:09 bakfull_dwsd_21.meta 100% 493KB 207.2MB/s 00:00 bakfull_dwsd_11.bak 100% 24GB 330.8MB/s 01:13 bakfull_dwsd_11.meta 100% 473KB 197.7MB/s 00:00 bakfull_dwsd_10.bak 100% 23GB 318.6MB/s 01:12 bakfull_dwsd_10.meta 100% 469KB 140.5MB/s 00:00 bakfull_dwsd_15.bak 100% 24GB 333.0MB/s 01:13 bakfull_dwsd_15.meta 100% 473KB 198.8MB/s 00:00 bakfull_dwsd_9.bak 100% 23GB 337.5MB/s 01:08 bakfull_dwsd_9.meta 100% 465KB 198.3MB/s 00:00 bakfull_dwsd_13.bak 100% 23GB 332.5MB/s 01:10 bakfull_dwsd_13.meta 100% 461KB 191.7MB/s 00:00 bakfull_dwsd_4.bak 100% 23GB 323.0MB/s 01:11 bakfull_dwsd_4.meta 100% 461KB 200.8MB/s 00:00 bakfull_dwsd_8.bak 100% 22GB 314.8MB/s 01:12 bakfull_dwsd_8.meta 100% 469KB 217.8MB/s 00:00 bakfull_dwsd_20.bak 100% 23GB 372.1MB/s 01:02 bakfull_dwsd_20.meta 100% 501KB 251.9MB/s 00:00 bakfull_dwsd_7.bak 100% 23GB 349.4MB/s 01:08 bakfull_dwsd_7.meta 100% 461KB 238.3MB/s 00:00 bakfull_dwsd_26.bak 100% 23GB 339.3MB/s 01:10 bakfull_dwsd_26.meta 100% 461KB 232.5MB/s 00:00 bakfull_dwsd_23.bak 100% 23GB 353.1MB/s 01:06 bakfull_dwsd_23.meta 100% 465KB 232.4MB/s 00:00 bakfull_dwsd_6.bak 100% 23GB 357.1MB/s 01:05 bakfull_dwsd_6.meta 100% 489KB 204.1MB/s 00:00 bakfull_dwsd_12.bak 100% 23GB 340.6MB/s 01:08 bakfull_dwsd_12.meta 100% 473KB 182.7MB/s 00:00 bakfull_dwsd_31.bak 60% 14GB 355.3MB/s 00:25 ETA bakfull_dwsd_31.bak 62% 14GB 357.5MB/s 00:23 ETA bakfull_dwsd_31.bak 64% 14GB 359.4MB/s 00:22 ETA bakfull_dwsd_31.bak 100% 22GB 355.5MB/s 01:04 bakfull_dwsd_31.meta 100% 465KB 225.9MB/s 00:00 bakfull_dwsd_16.bak 100% 23GB 344.7MB/s 01:08 bakfull_dwsd_16.meta 100% 461KB 222.2MB/s 00:00 bakfull_dwsd_25.bak 100% 23GB 359.6MB/s 01:05 bakfull_dwsd_25.meta 100% 449KB 204.0MB/s 00:00 bakfull_dwsd_24.bak 100% 22GB 350.5MB/s 01:03 bakfull_dwsd_24.meta 100% 457KB 150.5MB/s 00:00 bakfull_dwsd_30.bak 100% 22GB 341.3MB/s 01:06 bakfull_dwsd_30.meta 100% 465KB 203.5MB/s 00:00 bakfull_dwsd_27.bak 100% 23GB 343.5MB/s 01:07 bakfull_dwsd_27.meta 100% 477KB 186.9MB/s 00:00 bakfull_dwsd_29.bak 100% 23GB 351.7MB/s 01:08 bakfull_dwsd_29.meta 100% 469KB 164.5MB/s 00:00 bakfull_dwsd_19.bak 100% 23GB 346.1MB/s 01:09 bakfull_dwsd_19.meta 100% 473KB 221.8MB/s 00:00 bakfull_dwsd_22.bak 100% 23GB 349.7MB/s 01:08 bakfull_dwsd_22.meta 100% 485KB 227.6MB/s 00:00 bakfull_dwsd_28.bak 100% 23GB 343.9MB/s 01:08 bakfull_dwsd_28.meta 100% 461KB 221.7MB/s 00:00 bakfull_dwsd.meta 100% 15MB 405.0MB/s 00:00

5.备库脱机还原(继承使用备份集的并行度进行还原)

#恢复还原三部曲 RMAN> restore database '/dmdata/PROD/dm.ini' from backupset '/dmdata/bakfull_dwsd' restore database '/dmdata/PROD/dm.ini' from backupset '/dmdata/bakfull_dwsd' file dm.key not found, use default license! Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL [Percent:100.00%][Speed:0.00M/s][Cost:00:29:34][Remaining:00:00:00] restore successfully. time used: 00:29:35.188 RMAN> recover database '/dmdata/PROD/dm.ini' from backupset '/dmdata/bakfull_dwsd' recover database '/dmdata/PROD/dm.ini' from backupset '/dmdata/bakfull_dwsd' Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[18159884394], file_lsn[18159884394] no log generates while the backupset [/dmdata/bakfull_dwsd] created recover successfully! time used: 429.364(ms) RMAN> recover database '/dmdata/PROD/dm.ini' update db_magic recover database '/dmdata/PROD/dm.ini' update db_magic Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[18159884394], file_lsn[18159884394] recover successfully! time used: 00:00:01.073 RMAN> exit time used: 0.246(ms)

6.主备启动到mount状态并设置角色和OGUID

#主库启动到mount状态下 [dmdba@PAI-I-01 dmdata]$ cd /dm/bin [dmdba@PAI-I-01 bin]$ ./DmServicePROD status DmServicePROD is stopped [dmdba@PAI-I-01 bin]$ ./DmServicePROD start mount Starting DmServicePROD: [ OK ] [dmdba@PAI-I-01 bin]$ ./DmServicePROD status DmServicePROD (pid 171832) is running. #备库启动到mount状态下 [dmdba@PAI-I-02 bin]$ ./DmServicePROD status DmServicePROD dead but pid file exists [dmdba@PAI-I-02 bin]$ ./DmServicePROD start mount Starting DmServicePROD: [ OK ] [dmdba@PAI-I-02 bin]$ ./DmServicePROD status DmServicePROD (pid 171832) is running. #mount下设置主库 [dmdba@PAI-I-01 bin]$ ./disql SYSDBA/SYSDBA:11236 Server[LOCALHOST:11236]:mode is normal, state is mount login used time : 5.294(ms) disql V8 SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1); DMSQL executed successfully used time: 18.519(ms). Execute id is 0. SQL> ALTER DATABASE PRIMARY; executed successfully used time: 5.829(ms). Execute id is 0. SQL> SP_SET_OGUID(2023010401); DMSQL executed successfully used time: 3.850(ms). Execute id is 1. SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0); DMSQL executed successfully used time: 16.354(ms). Execute id is 2. #mount下设置备库 [dmdba@PAI-I-02 bin]$ ./disql SYSDBA/SYSDBA:11236 Server[LOCALHOST:11236]:mode is normal, state is mount login used time : 4.997(ms) disql V8 SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1); DMSQL executed successfully used time: 18.457(ms). Execute id is 0. SQL> ALTER DATABASE STANDBY; executed successfully used time: 6.995(ms). Execute id is 0. SQL> SP_SET_OGUID(2023010401); DMSQL executed successfully used time: 3.593(ms). Execute id is 1. SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0); DMSQL executed successfully used time: 15.862(ms). Execute id is 2.

7.检查主备守护进程配置参数并启动守护进程

注意:守护进程会定期将数据库拉起到OPEN

#主库的dmwatcher.ini(OGUID和mount状态设置的一致) [dmdba@PAI-I-01 bin]$ cat /dmdata/PROD/dmwatcher.ini [GRP1] DW_TYPE = GLOBAL DW_MODE = AUTO DW_ERROR_TIME = 60 INST_RECOVER_TIME = 60 INST_ERROR_TIME = 35 INST_INI = /dmdata/PROD/dm.ini INST_OGUID = 2023010401 INST_STARTUP_CMD = /dm/bin/dmserver INST_AUTO_RESTART = 1 RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 0 #备库的dmwatcher.ini [dmdba@PAI-I-02 bin]$ cat /dmdata/PROD/dmwatcher.ini [GRP1] DW_TYPE = GLOBAL DW_MODE = AUTO DW_ERROR_TIME = 60 INST_RECOVER_TIME = 60 INST_ERROR_TIME = 35 INST_INI = /dmdata/PROD/dm.ini INST_OGUID = 2023010401 INST_STARTUP_CMD = /dm/bin/dmserver INST_AUTO_RESTART = 1 RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 0 #启动主库守护进程 [dmdba@PAI-I-01 bin]$ ./DmWatcherServicePROD status DmWatcherServicePROD is stopped [dmdba@PAI-I-01 bin]$ ./DmWatcherServicePROD start Starting DmWatcherServicePROD: [ OK ] [dmdba@PAI-I-01 bin]$ ./DmWatcherServicePROD status DmWatcherServicePROD (pid 174876) is running. #启动备库守护进程 [dmdba@PAI-I-02 bin]$ ./DmWatcherServicePROD status DmWatcherServicePROD is stopped [dmdba@PAI-I-02 bin]$ ./DmWatcherServicePROD start Starting DmWatcherServicePROD: [ OK ] [dmdba@PAI-I-02 bin]$ ./DmWatcherServicePROD status DmWatcherServicePROD (pid 86209) is running.

8.查看监控dmmonitor

[dmdba@PAI-I-01 bin]$ ./dmmonitor /dmdata/PROD/dmmonitor.ini [monitor] 2023-03-03 10:09:32: DMMONITOR[4.0] V8 [monitor] 2023-03-03 10:09:32: DMMONITOR[4.0] IS READY. [monitor] 2023-03-03 10:09:32: Received message from(PROD_STBY0) WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-03-03 10:10:43 OPEN OK PROD_STBY0 OPEN STANDBY NULL 46 18159885658 18159885658 [monitor] 2023-03-03 10:09:32: Received message from(PROD_MASTER) WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN 2023-03-03 10:09:32 OPEN OK PROD_MASTER OPEN PRIMARY VALID 46 18159885659 18159885660 show 2023-03-03 10:09:35 #================================================================================# GROUP OGUID MON_CONFIRM MODE MPP_FLAG GRP1 2023010401 TRUE AUTO FALSE <<DATABASE GLOBAL INFO:>> DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 10.10.10.145 11316 2023-03-03 10:09:34 GLOBAL VALID OPEN PROD_MASTER OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID EP INFO: INST_IP INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG 192.168.111.145 11236 OK PROD_MASTER OPEN PRIMARY 0 0 REALTIME VALID 37610438 18159885660 37610438 18159885660 NONE <<DATABASE GLOBAL INFO:>> DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT 10.10.10.146 11317 2023-03-03 10:10:45 GLOBAL VALID OPEN PROD_STBY0 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID EP INFO: INST_IP INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG 192.168.111.146 11236 OK PROD_STBY0 OPEN STANDBY 0 0 REALTIME VALID 37610426 18159885659 37610426 18159885659 NONE DATABASE(PROD_STBY0) APPLY INFO FROM (PROD_MASTER), REDOS_PARALLEL_NUM (1): DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[37610437, 37610437, 37610438], (RLSN, SLSN, KLSN)[18159885659, 18159885659, 18159885660], N_TSK[0], TSK_MEM_USE[2048] REDO_LSN_ARR: (18159885659)

8.1备份集和还原后数据大小

[dmdba@PAI-I-02 dmdata]$ du -sh * 734G bakfull_dwsd 7.0T PROD

9.小结

1、数据还原之后,再次执行还原,数据空间会被覆盖,因此磁盘空间不会成倍增大;
2、综合主备带宽和其他资源情况,建议考虑备份并行压缩等技术,以提高执行效率;
3、避免[-719]:Access forbidden when standby version update.报错,原因是将源备份集同时在主备库上还原恢复所致。

参考链接:https://eco.dameng.com/document/dm/zh-cn/start/

image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
3人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论