MySQL读写别离及MMM高可用架构测验51CTO博客 - 娱乐之横扫全球

MySQL读写别离及MMM高可用架构测验51CTO博客

2019年04月04日09时00分57秒 | 作者: 傲菡 | 标签: 别离,效劳,读写 | 浏览: 180

架构组件简介

MySQL-Proxy简介

MySQL-Proxy是处在你的MySQL数据库客户和效劳端之间的程序,它还支撑嵌入性脚本语言Lua。这个署理能够用来剖析、监控和改换(transform)通讯数据,它支撑十分广泛的运用场景:

负载平衡和毛病搬运处理

查询剖析和日志

SQL宏(SQL macros)

查询重写(query rewriting)

履行shell指令

MySQL Proxy更强壮的一项功用是完成“读写别离(Read/Write Splitting)”。根本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库仿制被用来把事务性查询导致的改变同步到集群中的从数据库。

MMM简介

MMM即Master-Master Replication Manager for MySQL(mysql主主仿制办理器),是关于mysql主主仿制装备的监控、毛病搬运和办理的一套可弹性的脚本套件(在任何时候只要一个节点能够被写入),这个套件也能根据规范的主从装备的恣意数量的从效劳器进行读负载均衡,所以你能够用它来在一组居于仿制的效劳器发动虚拟ip,除此之外,它还有完成数据备份、节点之间从头同步功用的脚本。

MySQL自身没有供给replication failover的解决计划,经过MMM计划能完成效劳器的毛病搬运,然后完成mysql的高可用。

MMM项目来自 Google:http://code.google.com/p/mysql-master-master

官方网站为:http://mysql-mmm.org

MMM主要功用由下面三个脚本供给:

mmm_mond    :担任一切的监控作业的监控看护进程,决议节点的移除等等

mmm_agentd  :运行在mysql效劳器上的署理看护进程,经过简略长途效劳集供给给监控节点

mmm_control:经过指令行办理mmm_mond进程

关于此架构的优缺陷:

长处:安全性、稳定性高,可扩展性好,当主效劳器挂掉今后,另一个主当即接收,其他的从效劳器能主动切换,不必人工干预。

缺陷:至少三个节点,对主机的数量有要求,需求完成读写别离,能够在程序扩展上比较难完成。一起对主从(双主)同步推迟要求比较高!因而不适合数据安全十分严厉的场合。

有用场所:高拜访量,事务增加快,而且要求完成读写别离的场景。

架构形式(双master零slave)简介

主机信息:

功用

mysql Server-id

IP

hostname

monitor


192.168.9.159

proxy

DB1

Server-id=1

192.168.9.157

DB01

DB2

Server-id=2

192.168.9.158

DB02

虚拟ip分配:

Num

vip

Role

01

192.168.9.154

Write

02

192.168.9.155

Read

03

192.168.9.156

Read

此架构以mysql作为数据库,两台数据库DB01、DB02主从仿制(Master-Slave)的方法来同步数据,再经过读写别离(MySQL-Proxy)+HA(mysql-mmm)来提高后端数据库的并发负载及ha才能。

前端运用经过拜访mysql-proxy中界说的proxy-address及端口拜访数据库,此间mysql-proxy会经过其装备文件中界说的proxy-backend-addresses和proxy-read-only-backend-addresses分配到相应的数据库。假如将proxy-backend-addresses和proxy-read-only-backend-addresses界说成mysql-mmm中界说的vip,就能够与mysql-mmm的毛病切换功用相结合。详细施行进程见下文。

一、 MySQL仿制完成互为主从双机热备

Mysql主从仿制应该不难,在这里我就不再赘述。下面是一些需求留意的当地:

1.1效劳器参数

[DB01 效劳器]

# master #
server-id = 1
binlog-ignore-db=mysql
replicate-ignore-db=mysql
log-bin=/usr/local/mysql/binlog/master-bin
binlog_format=mixed
expire_logs_days= 30
# slave
relay-log=/usr/local/mysql/binlog/slave-relay-bin

[DB02 效劳器]

# master #
server-id = 2
binlog-ignore-db=mysql
replicate-ignore-db=mysql
log-bin=/usr/local/mysql/binlog/master-bin
binlog_format=mixed
expire_logs_days= 30
# slave
relay-log=/usr/local/mysql/binlog/slave-relay-bin

1.2 操作过程

以下操作均在root用户登录mysql之后操作。

# DB01 DB02 效劳器中止同步
 STOP SLAVE;
 # DB01 DB02 效劳器清空Master日志
 RESET MASTER;
 # DB01 DB02 效劳器授权同步账户
 GRANT REPLICATION SLAVE ON *.* TO slave@% IDENTIFIED BY slave;
 FLUSH PRIVILEGES;
 # DB01 DB02 效劳器锁表(锁表状况下不能中止mysql进程,否则会失利;也能够不锁表,封闭前台的一切web效劳器)
 FLUSH TABLES WITH READ LOCK;
 # 做仿制之前最好手动同步一次数据库。
# 查看 DB01 效劳器主机状况(记载二进制开端文件,方位)
 SHOW MASTER STATUS;
 #DB02效劳器锁表(锁表状况下不能中止mysql进程,否则会失利)
 FLUSH TABLES WITH READ LOCK;
 # 修正 DB02 效劳器装备
 CHANGE MASTER TO MASTER_HOST=192.168.9.157,MASTER_USER=slave, MASTER_PASSWORD=slave,MASTER_LOG_FILE=master-bin.000001,MASTER_LOG_POS=107;
 # 敞开 DB02 效劳器同步进程
 START SLAVE;
 # 查看 DB02 效劳器同步状况是否正常
 show slave status\G;
 # 查看 DB02 效劳器主机(记载二进制开端文件,方位)
 SHOW MASTER STATUS;
 # 修正 DB01 效劳器装备
 CHANGE MASTER TO MASTER_HOST=192.168.9.158,MASTER_USER=slave, MASTER_PASSWORD=slave,MASTER_LOG_FILE=master-bin.000001,MASTER_LOG_POS=107;
 # 敞开 DB01效劳器同步进程
 START SLAVE;
 # 别离查看 DB01、DB02 效劳器同步状况,确认是否成功
 show slave status\G;
 SHOW MASTER STATUS;
 # 解锁 DB01、DB02 效劳器
 UNLOCK TABLES;
 # 数据测验别离在 DB01、DB02 效劳器上创立表刺进数据测验

1.3 需求留意的当地

数据库目录下的master.info的内容会掩盖指令行或my.cnf中指定的部分选项,更改装备需删去master.info

my.cnf中的master装备在MySQL 6.0今后会撤销,官方主张运用动态的CHANGE MASTER

假如只指定ignore-db而不指定do-db。则创立数据库的操作也会同步。

双主形式运用log-slave-updates参数,会导致数据不一致

log-slave-updates    启用隶属效劳器上的日志功用,使这台计算机能够用来构成一个镜像链(A->B->C)。

互为同步装备实例:

1. DB01 DB02 互为主从同步test,不同步mysql:

两个数据库装备中均设置:binlog-do-db=test,binlog-ignore-db=mysql,replicate-do-db=test,replicate-ignore-db=mysql

2. DB01 DB02 互为主从只同步test,不同步其他数据库,新创立的也不会同步

两个数据库装备中均设置:binlog-do-db=test,replicate-do-db=test

3. DB01 DB02 互为主从不同步mysql,同步其他数据库,比如创立的新数据库也会同步

两个数据库装备中均设置:binlog-ignore-db=mysql,replicate-ignore-db=mysql

4. DB01 DB02互为主从同步一切数据库,包含新建的数据库

两个数据库装备中均不设置上述四项

二、mysql读写别离

2.1 场景描绘

数据库Master主效劳器DB01:192.168.9.157

数据库Master主效劳器DB02:192.168.9.158

MySQL-Proxy调度效劳器:192.168.9.159

以下操作,均是在192.168.10.132即MySQL-Proxy调度效劳器上进行的。

2.2 装置晋级体系所需软件包

yum -y install gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devel wget make glibc glibc-devel gettext automake ntp hdparm dmidecode openssh-clients telnet traceroute pciutils

2.3 mysql-proxy装置

2.3.1 装置libevent

wget http://monkey.org/~provos/libevent-2.0.10-stable.tar.gz
tar xvfz libevent-2.0.10-stable.tar.gz
cd libevent-2.0.10-stable 
./configure
make&&make install
cd ..

2.3.2装置glib-2

wget http://ftp.gnome.org/pub/gnome/sources/glib/2.22/glib-2.22.5.tar.gz
tar xvfz glib-2.22.5.tar.gz
cd glib-2.22.5 
./configure
make && make install

MySQL-Proxy的读写别离主要是经过rw-splitting.lua脚本完成的,因而需求装置lua。

lua可经过以下方法取得

从http://www.lua.org/download.html下载源码包

Lua装置之前需求先装置readline6.1,否则会报错短少头文件:

wget ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz
tar xvfz readline-6.1.tar.gz
cd readline-6.1
./configure
make&&make install
cd ..
#wget http://www.lua.org/ftp/lua-5.2.0.tar.gz
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zxvf lua-5.1.4.tar.gz
cd lua-5.1.4
# 64位体系,需在CFLAGS里加上-fPIC 
vi src/Makefile 
CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS) 
make linux 
make install 
# pkg-config 环境变量 
cp etc/lua.pc /usr/local/lib/pkgconfig/ 
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 
cd ..

2.3.4 装置mysql-proxy

MySQL-Proxy可经过以下网址取得:

http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/

wget http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.2.tar.gz
tar xvfz mysql-proxy-0.8.2.tar.gz 
cd mysql-proxy-0.8.2 
./configure 
make && make install
#编译装置的mysql-proxy形似没有读写完成别离相关的脚本,所以需求下载装置
 wget http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz
tar xvfz mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz
cd mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit/share/doc
mv mysql-proxy /usr/local/share/

2.4装备发动mysql-proxy

2.4.1装备mysql-proxy

vi /etc/mysql-proxy.cnf

#创立装备文件,内容如下

[mysql-proxy]
proxy-address=192.168.9.159:3306
proxy-backend-addresses=192.168.9.154:3306
proxy-read-only-backend-addresses=192.168.9.155:3306
proxy-read-only-backend-addresses=192.168.9.156:3306
proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua
keepalive=true
log-level=error
log-file=/home/logs/mysql-proxy.log

2.4.2 创立mysql-proxy发动脚本

#创立发动脚本,内容如下:

vi /etc/init.d/mysql-proxy

#!/bin/sh
#  
# mysql-proxy This script starts and stops the mysql-proxy daemon
#
# chkconfig: - 78 30
# processname: mysql-proxy
# description: mysql-proxy is a proxy daemon to mysql
# Source function library.
. /etc/rc.d/init.d/functions
#LUA_PATH=/usr/local/lib/mysql-proxy/lua/?.lua
PROXY_PATH=/usr/local/bin
prog="mysql-proxy"
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
# Set default mysql-proxy configuration.
PROXY_OPTIONS="daemon defaults-file=/etc/mysql-proxy.cnf"
PROXY_PID=/var/run/mysql-proxy.pid
# Source mysql-proxy configuration.
if [ -f /etc/sysconfig/mysql-proxy ]; then
    . /etc/sysconfig/mysql-proxy
fi
PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH
# By default its all good
RETVAL=0
# See how we were called.
case "$1" in
  start)
    # Start daemon.
    echo -n $"Starting $prog: "
    daemon $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS pid-file $PROXY_PID
    RETVAL=$?
    echo
    if [ $RETVAL = 0 ]; then
      touch /var/lock/subsys/mysql-proxy
    fi
   ;;
  stop)
    # Stop daemons.
    echo -n $"Stopping $prog: "
    killproc $prog
    RETVAL=$?
    echo
    if [ $RETVAL = 0 ]; then
      rm -f /var/lock/subsys/mysql-proxy
      rm -f $PROXY_PID
    fi
   ;;
  restart)
    $0 stop
    sleep 3
    $0 start
   ;;
  condrestart)
   [ -e /var/lock/subsys/mysql-proxy ] && $0 restart
  ;;
  status)
    status mysql-proxy
    RETVAL=$?
   ;;
  *)
    echo "Usage: $0 {start|stop|restart|status|condrestart}"
    RETVAL=1
   ;;
esac
exit $RETVAL

2.4.3 发动mysql-proxy

chmod +x /etc/init.d/mysql-proxy
#创立日志目录
cd /home
mkdir logs
chmod 0777 logs
# 发动mysql-proxy
/etc/init.d/mysql-proxy start
# 中止mysql-proxy
/etc/init.d/mysql-proxy stop
# 重启mysql-proxy
/etc/init.d/mysql-proxy restart
#添加到效劳
chkconfig mysql-proxy on
#查看mysql-proxy的帮助文件
mysql-proxy –help-all
#登录mysql-proxy
mysql -uroot -p -h192.168.9.159 –P3306
#查看现已署理的数据库
show processlist;

2.5 测验验证读写别离

#1.别离登录DB01 DB02 stop slave;
 mysql -uroot -p
 mysql> stop slave;
 #2.在DB01的test数据库树立一个表hh
  mysql> use test;
  mysql> create table hh(id int(5),address char(255));
 #在DB02的test数据库树立一个表hh
  mysql> use test;
  mysql> create table hh(id int(5),name char(255));
 #两个表姓名相同却有不同的字段。
 #3.在proxy上敞开mysql-proxy并登录
 /etc/init.d/mysql-proxy start
 mysql -uroot -p -h192.168.9.159 –P3306
 #对表进行查询,成果显现DB02上创立的表的结构;
 mysql> use test;
 mysql> desc hh;
+-+-++-+-+-+
| Field | Type  | Null | Key | Default | Extra |
+-+-++-+-+-+
| id  | int(5)  | YES  |   | NULL  |   |
| name  | char(255) | YES  |   | NULL  |   |
+-+-++-+-+-+
2 rows in set (0.00 sec)
#在当时环境下创立一个表
mysql> create table hr_boy(id int(5),name char(255));
Query OK, 0 rows affected (0.01 sec)
#在DB01上对表进行查询,成果
mysql> use test;
mysql> desc hr_boy;
+-+-++-+-+-+
| Field | Type  | Null | Key | Default | Extra |
+-+-++-+-+-+
| id  | int(5)  | YES  |   | NULL  |   |
| name  | char(255) | YES  |   | NULL  |   |
+-+-++-+-+-+
2 rows in set (0.00 sec)

三、 装置布置MMM

环境描绘:

MMM效劳端:192.168.9.159

MMM客户端:192.168.9.157,192.168.9.158

3.1装置MMM效劳端

编译装置需求以下四个组件:

wget http://ftp.osuosl.org/pub/nslu2/sources/Algorithm-Diff-1.1902.tar.gz
wget http://ftp.riken.go.jp/pub/pub/lang/CPAN/modules/by-module/Proc/EHOOD/Proc-Daemon-0.03.tar.gz
wget http://mysql-master-master.googlecode.com/files/mysql-master-master-1.2.6.tar.gz
yum -y install perl-DBD-MySQL

在这里咱们选用yum方法装置。

3.1.1 先装置相关的包

yum -y install liblog-log4perl-perl libmailtools-perl liblog-dispatch-perl libclass-singleton-perl libproc-daemon-perl libalgorithm-diff-perl  libdbi-perl libdbd-mysql-perl

3.1.2 装置MMM

wget http://mirrors.ustc.edu.cn/fedora/epel//6/x86_64/epel-release-6-5.noarch.rpm
rpm -ivh epel-release-6-5.noarch.rpm
yum install -y mysql-mmm-agent mysql-mmm-monitor mysql-mmm-tool

3.2 装置MMM客户端(DB01 DB02)

wget http://mirrors.ustc.edu.cn/fedora/epel//6/x86_64/epel-release-6-5.noarch.rpm
rpm -ivh epel-release-6-5.noarch.rpm
yum install -y mysql-mmm-agent

三台主机装置以上软件后,即可进行装备

3.3 装备MMM客户端(DB01 DB02)

3.3.1 修正mmm_common.conf

#All generic configuration-options are grouped in a separate file called /etc/mysql-mmm/mmm_common.conf. This file will be the same on all hosts in the system:
vi /etc/mysql-mmm/mmm_common.conf
#-
active_master_role  writer
<host default>
  cluster_interface   eth0
  pid_path      /var/run/mysql-mmm/mmm_agentd.pid
  bin_path      /usr/libexec/mysql-mmm/
  replication_user    slave
  replication_password  slave
  agent_user      mmm_agent
  agent_password    RepAgent
</host>
<host db1>
  ip  192.168.9.157
  mode  master
  peer  db2
</host>
<host db2>
  ip  192.168.9.158
  mode  master
  peer  db1
</host>
#<host db3>
#  ip  192.168.100.51
#  mode  slave
#</host>
<role writer>
  hosts db1, db2
  ips   192.168.9.154
  mode  exclusive
</role>
<role reader>
  hosts db1, db2
  ips   192.168.9.155,192.168.9.156
  mode  balanced
</role>
#-
#Dont forget to copy this file to all other hosts (including the monitoring host).

3.3.2 修正mmm_agent.conf

On the database hosts we need toedit /etc/mysql-mmm/mmm_agent.conf. Change “db1” accordingly on the other hosts:

vi /etc/mysql-mmm/mmm_agent.conf
#DB1
 include mmm_common.conf
 this db1
#-
#DB2
 include mmm_common.conf
 this db2
#-

3.4 装备MMM效劳端

3.4.1 修正mmm_mon.conf

On the monitor host we need toedit /etc/mysql-mmm/mmm_mon.conf

vi /etc/mysql-mmm/mmm_mon.conf
#-
include mmm_common.conf
<monitor>
    ip         127.0.0.1
    pid_path       /var/run/mmm_mond.pid
    bin_path       /usr/lib/mysql-mmm/
    status_path      /var/lib/misc/mmm_mond.status
    ping_ips       192.168.9.157,192.168.9.158,192.168.9.254
    auto_set_online   10
</monitor>
<host default>
    monitor_user      mmm_monitor
    monitor_password    RepMonitor
</host>
debug 0
#-
3.5 设置权限(MMM客户端)
在一切MMM客户端为监控程序创立授权帐号
GRANT ALL PRIVILEGES on *.* tommm_agent@% identified by RepAgent;
GRANT ALL PRIVILEGES on *.* tommm_monitor@% identified by RepMonitor;
flush privileges;

3.6 MMM测验

3.6.1 发动MMM客户端(DB01 DB02)

将mysql-mmm-agent添加为效劳:

chkconfig mysql-mmm-agent on
/etc/init.d/mysql-mmm-agent start
Starting MMM Agent Daemon:           [  OK  ]

以上信息阐明客户端发动正常

3.6.2 发动MMM效劳器端(monitor)

#(On the monitoring host) Edit/etc/default/mysql-mmm-monitor to enable the monitor:

vi /etc/default/mysql-mmm-monitor
 #-
 ENABLED=1
 #-
 #Then start it:
 chkconfig mysql-mmm-monitor on
/etc/init.d/mysql-mmm-monitor start

3.6.3 MMM状况查看

(1)#Wait some seconds formmmd_mon to start up. After a few seconds you can use mmm_control to check thestatus of the cluster:

[root@Proxy soft]# mmm_control show
# Warning: agent on host db2 is not reachable
db1(192.168.9.157) master/HARD_OFFLINE. Roles:
db2(192.168.9.158) master/HARD_OFFLINE. Roles:

(2)设置hosts online (db1first, because the slaves replicate from this host):

[root@Proxy soft]#mmm_control set_online db1
 OK: State of db1 changed to ONLINE. Now you can wait some time and check its new roles!
[root@Proxy soft]#mmm_control set_online db2
 OK: State of db2 changed to ONLINE. Now you can wait some time and check its new roles!
[root@ Proxy soft]# mmm_control checks all
db2  ping   [last change: 2013/09/10 21:52:01]  OK
db2  mysql    [last change: 2013/09/10 21:52:04]  OK
db2  rep_threads  [last change: 2013/09/10 21:20:22]  OK
db2  rep_backlog  [last change: 2013/09/10 21:20:22]  OK: Backlog is null
db1  ping   [last change: 2013/09/10 21:20:22]  OK
db1  mysql    [last change: 2013/09/10 21:20:22]  OK
db1  rep_threads  [last change: 2013/09/10 22:16:10]  OK
db1  rep_backlog  [last change: 2013/09/10 21:20:22]  OK: Backlog is null

3.6.4模仿宕机测验

随意找一个客户端,履行写操作:

@client[root@mysql-1 ~]# vi /usr/local/mysql/binlog/inserting-into-db.sh
#!/bin/bash
while true;
do
mysql -uxxxx -pxxxxxx -h192.168.9.154 –P3306 database= test -e "insert into test values(null);"
sleep 1 ;
done;
[root@mysql-1 ~]# ./inserting-into-db.sh &

能够看到两个db中的binlog显现的server id都是1,也就是说当时情况下db01是作为写库。

#中止db01

[root@DB01 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!

当即康复DB1后proxy上查看mmm集群状况

查看mmmDB1的日志:

[root@DB01 binlog]# tail -f /var/log/mysql-mmm/mmm_agentd.log
2012/02/03 17:46:10 FATAL Couldnt allow writes: ERROR: Cant connect to MySQL (host = 192.168.9.157:3306, user = mmm_agent)! Lost connection to MySQL server at reading initial communication packet, system error: 111
2012/02/03 17:46:13 INFO We have some new roles added or old rules deleted!
2012/02/03 17:46:13 INFO Deleted: reader(192.168.9.156), writer(192.168.9.154)
2012/02/03 17:46:13 FATAL Couldnt deny writes: ERROR: Cant connect to MySQL (host = 192.168.9.157:3306, user = mmm_agent)! Lost connection to MySQL server at reading initial communication packet, system error: 111
2012/02/03 17:59:48 INFO We have some new roles added or old rules deleted!
2012/02/03 17:59:48 INFO Added: reader(192.168.9.155)
2012/02/03 18:01:12 INFO We have some new roles added or old rules deleted!

从日志能够看出,db1中止之后,mmm提示connect error,由于当时的写库是db1,所以mmm以为db2上的数据现已不能和db1保持一致了,故把db2的读人物(reader)迁移到db1上。变成了:

db1(192.168.9.157) master/ONLINE. Roles: reader(192.168.9.157)
db2(192.168.9.158) master/ONLINE. Roles: reader(192.168.9.156), writer(192.168.9.154)

可是,若DB1未当即康复作业,mmm的”mysql”查看项在10秒后呈现报警,以为db1现已完全失利,因而会把db1设置状况为hard_offline,把 db2从replication_fail状况切换到online状况(由于db2的mysql至少还活着)一起把上面的一切人物切换到db2上。状况最 终变为:

[root@Proxy mysql-mmm]# mmm_control show
db1(192.168.9.157) master/HARD_OFFLINE. Roles:
db2(192.168.9.158) master/ONLINE. Roles: reader(192.168.9.155), reader(192.168.9.156), writer(192.168.9.154)

很显然,当DB1或DB2中的其间一台宕机之后,mmm都会当行将宕机的主机的人物悉数转换到另一台DB。

仔细剖析Mmm的处理过程大致是:

db1的“mysql”check康复正常,然后把db1切换到awaiting_recovery状况。然后mmm判别db6的宕机时刻在正常范围内,不属于异常情况,因而主动切换为online状况。

把db2中的一个reader人物迁移到db1上。

现在写库是db2。

注:能够在exclusive 的<rolewriter>中设置prefer=db1,这样在db1康复正常之后,就能够再次被切换为写库了。


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表娱乐之横扫全球立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章