原作者:杨金福
某客户MogDB数据库出现"cached plan must not change result type"报错,此bug在Mogdb在3.0.6版上已修复;以下测试MogDB集群升级(3.0.4–>3.0.6),操作步骤如下:
1.升级前环境检查
[root@mogdb1 ~]# ptk --version
PTK Version: v0.8.1 release
Go Version: go1.19.4
Build Date: 2023-05-30T11:09:14
Git Hash: 66a26fd
OS/Arch: linux/amd64
[root@mogdb1 ~]#
[root@mogdb1 ~]# ptk ls
cluster_name | id | addr | user | data_dir | db_version | create_time | comment
---------------+------+----------------------+------+------------------+------------------------------+---------------------+----------
pms | 6001 | 192.168.115.81:26000 | omm | /data/mogdb/data | MogDB 3.0.4 (build cc068866) | 2023-06-13T17:28:01 |
| 6002 | 192.168.115.82:26000 | omm | /data/mogdb/data | | |
[root@mogdb1 ~]# ptk cluster status -n pms
[ Cluster State ]
cluster_name : pms
cluster_state : Normal
database_version : MogDB 3.0.4 (build cc068866)
[ Datanode State ]
cluster_name | id | ip | port | user | nodename | db_role | state | upstream
---------------+------+----------------+-------+------+----------+---------+--------+-----------
pms | 6001 | 192.168.115.81 | 26000 | omm | dn_6001 | primary | Normal | -
| 6002 | 192.168.115.82 | 26000 | omm | dn_6002 | standby | Normal | -
[root@mogdb1 ~]# ptk cluster status -n pms --detail
[ Cluster State ]
cluster_name : pms
cluster_state : Normal
database_version : MogDB 3.0.4 (build cc068866)
[ Datanode State ]
cluster_name | id | ip | port | user | nodename | db_role | state | upstream
---------------+------+----------------+-------+------+----------+---------+--------+-----------
pms | 6001 | 192.168.115.81 | 26000 | omm | dn_6001 | primary | Normal | -
| 6002 | 192.168.115.82 | 26000 | omm | dn_6002 | standby | Normal | -
[ DataNode Detail ]
--------------- 192.168.115.81:26000(dn_6001) ---------------
role : primary
data_dir : /data/mogdb/data
az_name : AZ1
[Senders Info]:
sender_pid : 10020
local_role : Primary
peer_role : Standby
peer_state : Normal
state : Streaming
sender_sent_location : 0/39B0A220
sender_write_location : 0/39B0A220
sender_flush_location : 0/39B0A220
sender_replay_location : 0/39B0A220
receiver_received_location : 0/39B0A220
receiver_write_location : 0/39B0A220
receiver_flush_location : 0/39B0A220
receiver_replay_location : 0/39B0A220
sync_percent : 100%
sync_state : Sync
sync_priority : 1
sync_most_available : On
channel : 192.168.115.81:26001-->192.168.115.82:46078
--------------- 192.168.115.82:26000(dn_6002) ---------------
role : standby
data_dir : /data/mogdb/data
az_name : AZ1
[Receiver Info]:
receiver_pid : 9833
local_role : Standby
peer_role : Primary
peer_state : Normal
state : Normal
sender_sent_location : 0/39B0A220
sender_write_location : 0/39B0A220
sender_flush_location : 0/39B0A220
sender_replay_location : 0/39B0A220
receiver_received_location : 0/39B0A220
receiver_write_location : 0/39B0A220
receiver_flush_location : 0/39B0A220
receiver_replay_location : 0/39B0A220
sync_percent,channel : 100%
[root@mogdb1 ~]#
2.升级PTK
[root@mogdb1 ~]# which ptk
/root/.ptk/bin/ptk
[root@mogdb1 ~]# ls -l /root/.ptk/bin/ptk
-rwxr-xr-x 1 root root 38547456 Jun 4 06:38 /root/.ptk/bin/ptk
[root@mogdb1 ~]# mv /root/.ptk/bin/ptk /root/.ptk/bin/ptk.old
[root@mogdb1 ~]# cd /opt/software/mogdb_upgrade/
[root@mogdb1 mogdb_upgrade]# tar -zxvf ptk_linux_x86_64.tar.gz
README.md
ptk
[root@mogdb1 mogdb_upgrade]# cp ptk /root/.ptk/bin/ptk
[root@mogdb1 mogdb_upgrade]# ls -l /root/.ptk/bin/ptk
-rwxr-xr-x 1 root root 40239104 Nov 19 13:59 /root/.ptk/bin/ptk
[root@mogdb1 mogdb_upgrade]# ptk --version
PTK Version: v1.0.11 release
Go Version: go1.19.10
Build Date: 2023-11-10T15:44:29
Git Hash: d397de6d
OS/Arch: linux/amd64
[root@mogdb1 mogdb_upgrade]#
**注:**在集群的备节点上,也要同步升级PTK工具
3.检查数据库集群是否有创建过插件
暂不支持原数据库集群带着插件升级,建议在升级前需先drop掉所有的插件,在升级完成后,再补创建插件。
[root@mogdb1 ~]# ptk cluster -n pms list-plugins
List of Installed Plugins:
Plugin Name | dn_6001 | dn_6002
--------------+---------+----------
whale | Yes | No
orafce | Yes | No
Extension Status of Databases:
Database | Extension(s)
-----------+---------------
pms |
postgres |
[root@mogdb1 ~]#
注:
List of Installed Plugins:指安装过的插件列表,安装过并不意味着数据库里使用了。
Extension Status of Databases:指每个数据库中创建过的插件,如果没有创建过任何插件,Extension(s) 字段会为空.如果Extension(s) 字段有值,建议在升级前先drop掉所有的插件,在升级完成后,再补创建插件。
4.升级数据库集群
[root@mogdb1 ~]# ptk cluster -n pms upgrade -p /opt/software/mogdb_upgrade/MogDB-3.0.6-CentOS-x86_64.tar.gz
INFO[2023-11-19T14:16:20.198] PTK Version: 1.0.11 release
INFO[2023-11-19T14:16:20.400] new step recorder, current step: "start"
Tip:
The upgrade process relies on SSH.
Please ensure that the network is always worked
during the upgrade process.
INFO[2023-11-19T14:16:20.400] parsing package from /opt/software/mogdb_upgrade/MogDB-3.0.6-CentOS-x86_64.tar.gz
INFO[2023-11-19T14:16:24.753] kernel package name: MogDB-3.0.6-CentOS-64bit.tar.gz
INFO[2023-11-19T14:16:24.753] package version: MogDB-3.0.6,92.607,0e82b772
INFO[2023-11-19T14:16:24.753] check db version
INFO[2023-11-19T14:16:24.771] big upgrade: true
INFO[2023-11-19T14:16:24.771] current version: 3.0.4, target version: 3.0.6
INFO[2023-11-19T14:16:24.771] current number: 92.605, target number: 92.607
INFO[2023-11-19T14:16:24.771] version is ok
INFO[2023-11-19T14:16:24.771] check cluster status
INFO[2023-11-19T14:16:24.898] cluster state is ok
INFO[2023-11-19T14:16:24.899] check db config: enable_stream_replication
INFO[2023-11-19T14:16:24.941] config is ok: enable_stream_replication=on
INFO[2023-11-19T14:16:24.941] check segment-compressed table due to upgrade from 3.0.4
INFO[2023-11-19T14:16:25.067] create remote temporary upgrade directory
✔ PTK will set cluster to readonly during upgrade, are you ready (default=n) [y/n]: y
INFO[2023-11-19T14:17:13.897] set cluster to read-only
INFO[2023-11-19T14:17:13.950] prepare all upgrade sql
INFO[2023-11-19T14:17:14.523] extract upgrade_sql.tar.gz successfully
WARN[2023-11-19T14:17:14.524] no sql file found for upgrade-post maindb
WARN[2023-11-19T14:17:14.524] no sql file found for upgrade-post otherdb
WARN[2023-11-19T14:17:14.524] no sql file found for rollback-post maindb
WARN[2023-11-19T14:17:14.525] no sql file found for rollback-post otherdb
INFO[2023-11-19T14:17:14.525] begin: wait_xlog_sync
INFO[2023-11-19T14:17:14.525] check disk size
INFO[2023-11-19T14:17:14.636] check and wait xlog sync
INFO[2023-11-19T14:17:14.676] finished: wait_xlog_sync
INFO[2023-11-19T14:17:14.676] begin: backup_old_app
INFO[2023-11-19T14:17:14.676] backup old app
INFO[2023-11-19T14:17:20.221] finished: backup_old_app
INFO[2023-11-19T14:17:20.221] begin: exec_pre_sql
INFO[2023-11-19T14:17:20.221] [retry: 1] check cluster status
INFO[2023-11-19T14:17:20.357] cluster status is normal
INFO[2023-11-19T14:17:20.357] set upgrade_mode to 2
INFO[2023-11-19T14:17:20.431] execute rollback sql
INFO[2023-11-19T14:17:20.431] execute rollback sql on maindb
INFO[2023-11-19T14:17:20.627] execute rollback sql on otherdb: [template1 pms template0]
INFO[2023-11-19T14:17:20.957] execute upgrade sql
INFO[2023-11-19T14:17:20.957] execute upgrade sql on maindb
INFO[2023-11-19T14:17:21.105] execute upgrade sql on otherdb: [template1 pms template0]
INFO[2023-11-19T14:17:21.257] execute checkpoint
INFO[2023-11-19T14:17:21.599] finished: exec_pre_sql
INFO[2023-11-19T14:17:21.599] begin: stop_datanode
INFO[2023-11-19T14:17:21.599] stop all datanodes
INFO[2023-11-19T14:17:21.634] operation: stop
INFO[2023-11-19T14:17:21.635] ========================================
INFO[2023-11-19T14:17:21.635] stop db [192.168.115.82:26000] ...
INFO[2023-11-19T14:17:22.674] stop db [192.168.115.82:26000] successfully
INFO[2023-11-19T14:17:22.674] ========================================
INFO[2023-11-19T14:17:22.674] stop successfully
INFO[2023-11-19T14:17:22.711] operation: stop
INFO[2023-11-19T14:17:22.711] ========================================
INFO[2023-11-19T14:17:22.711] stop db [192.168.115.81:26000] ...
INFO[2023-11-19T14:17:23.750] stop db [192.168.115.81:26000] successfully
INFO[2023-11-19T14:17:23.750] ========================================
INFO[2023-11-19T14:17:23.750] stop successfully
INFO[2023-11-19T14:17:23.751] finished: stop_datanode
INFO[2023-11-19T14:17:23.751] begin: replace_binary
INFO[2023-11-19T14:17:23.751] backup old configs
INFO[2023-11-19T14:17:23.817] install new app
INFO[2023-11-19T14:17:23.817] extact kernel package locally
INFO[2023-11-19T14:17:24.427] distribute new kernel to all datanodes
INFO[2023-11-19T14:17:33.779] restore old configs to new app
INFO[2023-11-19T14:17:33.810] delete deprecated guc
INFO[2023-11-19T14:17:33.935] finished: replace_binary
INFO[2023-11-19T14:17:33.935] begin: upgrade_plugin
INFO[2023-11-19T14:17:33.935] finished: upgrade_plugin
INFO[2023-11-19T14:17:33.935] begin: start_dn_with_old_number
INFO[2023-11-19T14:17:33.935] start with old number
INFO[2023-11-19T14:17:33.992] operation: start
INFO[2023-11-19T14:17:33.992] ========================================
INFO[2023-11-19T14:17:33.992] start db [192.168.115.81:26000] ...
INFO[2023-11-19T14:17:37.898] start db [192.168.115.81:26000] successfully
INFO[2023-11-19T14:17:37.898] start db [192.168.115.82:26000] ...
INFO[2023-11-19T14:17:41.802] start db [192.168.115.82:26000] successfully
INFO[2023-11-19T14:17:41.943] wait following dn to Normal:
INFO[2023-11-19T14:17:41.943] dn: 192.168.115.82 state: Need repair
INFO[2023-11-19T14:17:45.108] ========================================
INFO[2023-11-19T14:17:45.108] start cluster successfully
INFO[2023-11-19T14:17:45.108] finished: start_dn_with_old_number
INFO[2023-11-19T14:17:45.108] begin: exec_post_sql
INFO[2023-11-19T14:17:45.108] [retry: 1] check cluster status
INFO[2023-11-19T14:17:45.230] cluster status is normal
INFO[2023-11-19T14:17:45.230] update upgrade_version
INFO[2023-11-19T14:17:45.250] set cluster to read-write
INFO[2023-11-19T14:17:45.295] execute rollback-post sql
INFO[2023-11-19T14:17:45.295] execute rollback-post sql on maindb
INFO[2023-11-19T14:17:45.490] execute rollback-post sql on otherdb: [template1 pms template0]
INFO[2023-11-19T14:17:45.729] execute upgrade-post sql
INFO[2023-11-19T14:17:45.729] execute upgrade-post sql on maindb
INFO[2023-11-19T14:17:45.885] execute upgrade-post sql on otherdb: [template1 pms template0]
INFO[2023-11-19T14:17:46.043] set cluster to read-only
INFO[2023-11-19T14:17:46.077] finished: exec_post_sql
INFO[2023-11-19T14:17:46.078] begin: restart_dn_finally
INFO[2023-11-19T14:17:46.078] restart all datanodes
INFO[2023-11-19T14:17:46.098] operation: stop
INFO[2023-11-19T14:17:46.098] ========================================
INFO[2023-11-19T14:17:46.098] stop db [192.168.115.82:26000] ...
INFO[2023-11-19T14:17:47.132] stop db [192.168.115.82:26000] successfully
INFO[2023-11-19T14:17:47.132] ========================================
INFO[2023-11-19T14:17:47.133] stop successfully
INFO[2023-11-19T14:17:47.175] operation: stop
INFO[2023-11-19T14:17:47.175] ========================================
INFO[2023-11-19T14:17:47.175] stop db [192.168.115.81:26000] ...
INFO[2023-11-19T14:17:49.218] stop db [192.168.115.81:26000] successfully
INFO[2023-11-19T14:17:49.218] ========================================
INFO[2023-11-19T14:17:49.218] stop successfully
INFO[2023-11-19T14:17:49.292] operation: start
INFO[2023-11-19T14:17:49.292] ========================================
INFO[2023-11-19T14:17:49.292] start db [192.168.115.81:26000] ...
INFO[2023-11-19T14:17:52.303] start db [192.168.115.81:26000] successfully
INFO[2023-11-19T14:17:52.303] start db [192.168.115.82:26000] ...
INFO[2023-11-19T14:17:55.680] start db [192.168.115.82:26000] successfully
INFO[2023-11-19T14:17:55.821] wait following dn to Normal:
INFO[2023-11-19T14:17:55.821] dn: 192.168.115.82 state: Need repair
INFO[2023-11-19T14:17:58.971] ========================================
INFO[2023-11-19T14:17:58.972] start cluster successfully
INFO[2023-11-19T14:17:58.972] finished: restart_dn_finally
INFO[2023-11-19T14:17:58.972] upgrade successfully
If you confirm upgrade no problem, you can run this to finish process:
ptk cluster -n pms upgrade-commit
If you want to cancel upgrade, you can run this to rollback it:
ptk cluster -n pms upgrade-rollback
INFO[2023-11-19T14:17:58.972] time elapsed: 1m39s
[root@mogdb1 ~]#
5.检查升级后数据库集群状态
[root@mogdb1 ~]# ptk ls
cluster_name | id | addr | user | data_dir | db_version | create_time | comment
---------------+------+----------------------+------+------------------+------------------------------+---------------------+----------
pms | 6001 | 192.168.115.81:26000 | omm | /data/mogdb/data | MogDB 3.0.6 (build 0e82b772) | 2023-06-13T17:28:01 |
| 6002 | 192.168.115.82:26000 | omm | /data/mogdb/data | | |
[root@mogdb1 ~]# ptk cluster status -n pms
[ Cluster State ]
cluster_name : pms
cluster_state : Normal
database_version : MogDB 3.0.6 (build 0e82b772)
[ Datanode State ]
cluster_name | id | ip | port | user | nodename | db_role | state | upstream
---------------+------+----------------+-------+------+----------+---------+--------+-----------
pms | 6001 | 192.168.115.81 | 26000 | omm | dn_6001 | primary | Normal | -
| 6002 | 192.168.115.82 | 26000 | omm | dn_6002 | standby | Normal | -
[root@mogdb1 ~]# ptk cluster status -n pms --detail
[ Cluster State ]
cluster_name : pms
cluster_state : Normal
database_version : MogDB 3.0.6 (build 0e82b772)
[ Datanode State ]
cluster_name | id | ip | port | user | nodename | db_role | state | upstream
---------------+------+----------------+-------+------+----------+---------+--------+-----------
pms | 6001 | 192.168.115.81 | 26000 | omm | dn_6001 | primary | Normal | -
| 6002 | 192.168.115.82 | 26000 | omm | dn_6002 | standby | Normal | -
[ DataNode Detail ]
--------------- 192.168.115.81:26000(dn_6001) ---------------
role : primary
data_dir : /data/mogdb/data
az_name : AZ1
[Senders Info]:
sender_pid : 11679
local_role : Primary
peer_role : Standby
peer_state : Normal
state : Streaming
sender_sent_location : 0/39B16F10
sender_write_location : 0/39B16F10
sender_flush_location : 0/39B16F10
sender_replay_location : 0/39B16F10
receiver_received_location : 0/39B16F10
receiver_write_location : 0/39B16F10
receiver_flush_location : 0/39B16F10
receiver_replay_location : 0/39B16F10
sync_percent : 100%
sync_state : Sync
sync_priority : 1
sync_most_available : On
channel : 192.168.115.81:26001-->192.168.115.82:46110
--------------- 192.168.115.82:26000(dn_6002) ---------------
role : standby
data_dir : /data/mogdb/data
az_name : AZ1
[Receiver Info]:
receiver_pid : 10648
local_role : Standby
peer_role : Primary
peer_state : Normal
state : Normal
sender_sent_location : 0/39B16F10
sender_write_location : 0/39B16F10
sender_flush_location : 0/39B16F10
sender_replay_location : 0/39B16F10
receiver_received_location : 0/39B16F10
receiver_write_location : 0/39B16F10
receiver_flush_location : 0/39B16F10
receiver_replay_location : 0/39B16F10
sync_percent,channel : 100%
[root@mogdb1 ~]# su - omm
Last login: Sat Nov 18 21:55:00 CST 2023 on pts/0
[omm@mogdb1 ~]$ gsql -r
gsql ((MogDB 3.0.6 build 0e82b772) compiled at 2023-09-08 03:05:33 commit 0 last mr 1801 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
MogDB=# select version();
version
------------------------------------------------------------------------------------------------------------------------------------------------------
(MogDB 3.0.6 build 0e82b772) compiled at 2023-09-08 03:05:33 commit 0 last mr 1801 on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)
MogDB=# create table test123(a number);
ERROR: cannot execute CREATE TABLE in a read-only transaction
MogDB=#
**注:**集群升级,在未执行 upgrade-commit前,升级后的集群处于“只读”状态;此时检查集群状态,如无问题,则可提交升级,如发现有问题,则可回滚升级
6.确认后提交升级
[root@mogdb1 ~]# ptk cluster -n pms upgrade-commit
INFO[2023-11-19T14:30:24.758] PTK Version: 1.0.11 release
INFO[2023-11-19T14:30:24.970] new step recorder, current step: "restart_dn_finally"
INFO[2023-11-19T14:30:24.970] load upgrade meta info
INFO[2023-11-19T14:30:24.970] check cluster status
INFO[2023-11-19T14:30:24.971] [retry: 1] check cluster status
INFO[2023-11-19T14:30:25.090] cluster status is normal
INFO[2023-11-19T14:30:25.090] set upgrade_mode to 0
INFO[2023-11-19T14:30:25.122] enable cluster read-write
INFO[2023-11-19T14:30:25.122] set cluster to read-write
INFO[2023-11-19T14:30:25.176] clear temporary directories
INFO[2023-11-19T14:30:25.335] commit success
INFO[2023-11-19T14:30:25.335] time elapsed: 0s
[root@mogdb1 ~]#
7.再次检查升级后数据库集群状态
[root@mogdb1 ~]# ptk --version
PTK Version: v1.0.11 release
Go Version: go1.19.10
Build Date: 2023-11-10T15:44:29
Git Hash: d397de6d
OS/Arch: linux/amd64
[root@mogdb1 ~]# ptk ls
cluster_name | id | addr | user | data_dir | db_version | create_time | comment
---------------+------+----------------------+------+------------------+------------------------------+---------------------+----------
pms | 6001 | 192.168.115.81:26000 | omm | /data/mogdb/data | MogDB 3.0.6 (build 0e82b772) | 2023-06-13T17:28:01 |
| 6002 | 192.168.115.82:26000 | omm | /data/mogdb/data | | |
[root@mogdb1 ~]# ptk cluster status -n pms
[ Cluster State ]
cluster_name : pms
cluster_state : Normal
database_version : MogDB 3.0.6 (build 0e82b772)
[ Datanode State ]
cluster_name | id | ip | port | user | nodename | db_role | state | upstream
---------------+------+----------------+-------+------+----------+---------+--------+-----------
pms | 6001 | 192.168.115.81 | 26000 | omm | dn_6001 | primary | Normal | -
| 6002 | 192.168.115.82 | 26000 | omm | dn_6002 | standby | Normal | -
[root@mogdb1 ~]# ptk cluster status -n pms --detail
[ Cluster State ]
cluster_name : pms
cluster_state : Normal
database_version : MogDB 3.0.6 (build 0e82b772)
[ Datanode State ]
cluster_name | id | ip | port | user | nodename | db_role | state | upstream
---------------+------+----------------+-------+------+----------+---------+--------+-----------
pms | 6001 | 192.168.115.81 | 26000 | omm | dn_6001 | primary | Normal | -
| 6002 | 192.168.115.82 | 26000 | omm | dn_6002 | standby | Normal | -
[ DataNode Detail ]
--------------- 192.168.115.81:26000(dn_6001) ---------------
role : primary
data_dir : /data/mogdb/data
az_name : AZ1
[Senders Info]:
sender_pid : 11679
local_role : Primary
peer_role : Standby
peer_state : Normal
state : Streaming
sender_sent_location : 0/39B1A9C0
sender_write_location : 0/39B1A9C0
sender_flush_location : 0/39B1A9C0
sender_replay_location : 0/39B1A9C0
receiver_received_location : 0/39B1A9C0
receiver_write_location : 0/39B1A9C0
receiver_flush_location : 0/39B1A9C0
receiver_replay_location : 0/39B1A9C0
sync_percent : 100%
sync_state : Sync
sync_priority : 1
sync_most_available : On
channel : 192.168.115.81:26001-->192.168.115.82:46110
--------------- 192.168.115.82:26000(dn_6002) ---------------
role : standby
data_dir : /data/mogdb/data
az_name : AZ1
[Receiver Info]:
receiver_pid : 10648
local_role : Standby
peer_role : Primary
peer_state : Normal
state : Normal
sender_sent_location : 0/39B1A9C0
sender_write_location : 0/39B1A9C0
sender_flush_location : 0/39B1A9C0
sender_replay_location : 0/39B1A9C0
receiver_received_location : 0/39B1A9C0
receiver_write_location : 0/39B1A9C0
receiver_flush_location : 0/39B1A9C0
receiver_replay_location : 0/39B1A9C0
sync_percent,channel : 100%
[root@mogdb1 ~]# su - omm
Last login: Sun Nov 19 14:22:49 CST 2023 on pts/0
[omm@mogdb1 ~]$ gsql -r
gsql ((MogDB 3.0.6 build 0e82b772) compiled at 2023-09-08 03:05:33 commit 0 last mr 1801 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
MogDB=# select version();
version
------------------------------------------------------------------------------------------------------------------------------------------------------
(MogDB 3.0.6 build 0e82b772) compiled at 2023-09-08 03:05:33 commit 0 last mr 1801 on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)
MogDB=# create table test123(a number);
CREATE TABLE
MogDB=# drop table test123;
DROP TABLE
MogDB=# \q
[omm@mogdb1 ~]$
参考文档:
PTK升级数据库:https://docs.mogdb.io/zh/ptk/v1.0/usage-upgrade
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




