您好,登錄后才能下訂單哦!
下文主要給大家?guī)?a title="MySQL" target="_blank" href="http://kemok4.com/mysql/">MySQL-5.5主從復(fù)制原理是什么及如何配置,希望MySQL-5.5主從復(fù)制原理是什么及如何配置能夠帶給大家實際用處,這也是我編輯這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。
環(huán)境:
[root@SQL-M ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@SQL-M ~]# uname -r
2.6.32-642.el6.x86_64
Master IP 192.168.0.88/24 eth0
Slave IP 192.168.0.90/24 eth0
主從復(fù)制原理:
當用戶對數(shù)據(jù)有增刪改操作時,主庫本地存一份,另外會把用戶增刪改的操作記錄在 binlog 里面(binlog是實現(xiàn)主從復(fù)制的基礎(chǔ)),binlog的索引文件是mysql-bin.index;從庫的IO線程根據(jù)本地master.info文件里面記錄的ip、port、user、password、binlog name、pos連接主庫IO線程,主庫判斷信息,正確就返回數(shù)據(jù),返回的數(shù)據(jù)里包括下次復(fù)制起始點的binlog名稱和pos值;從庫收到數(shù)據(jù)后寫入relay-log,同時把下次復(fù)制起始點的binlog名稱和pos值刷新進master.info文件,之后從庫的SQL線程讀取relay-log里面的SQL語句,執(zhí)行語句將數(shù)據(jù)寫入本地磁盤,主從復(fù)制完成。
配置要點:
主從復(fù)制,主庫開啟 bin-log 從庫開啟 relay-log ,主從 server-id 不能相同。
Master 配置:
[root@SQL-M ~]# vim /etc/my.cnf [client] port=3306 socket= /usr/local/mysql/mysql.sock default-character-set = utf8 [mysql] no-auto-rehash prompt=Master>\_ [mysqld] user = mysql port = 3306 socket = /usr/local/mysql/mysql.sock basedir = /usr/local/mysql datadir = /usr/local/mysql/data character-set-server = utf8 skip-character-set-client-handshake init-connect = 'SET NAMES utf8' open_files_limit=1024 back_log = 600 max_connections = 800 max_connect_errors = 3000 table_cache = 614 external-locking = FALSE max_allowed_packet =8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 2M query_cache_limit = 1M query_cache_min_res_unit = 2k thread_stack = 192K tmp_table_size = 2M max_heap_table_size = 2M server-id = 1 <<--- id 為 1 log-bin = /usr/local/mysql/data/mysql-bin <<--- 開啟 bin log binlog_cache_size = 1M max_binlog_cache_size = 1M max_binlog_size = 2M expire_logs_days = 7 key_buffer_size = 16M read_buffer_size = 1M read_rnd_buffer_size = 1M bulk_insert_buffer_size = 1M lower_case_table_names = 1 skip-name-resolve slave-skip-errors = 1032,1062,1007,1008,1050 replicate-ignore-db=mysql innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 16M innodb_file_io_threads = 4 innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 2M innodb_log_file_size = 4M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_file_per_table = 0 [mysqldump] quick max_allowed_packet = 2M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/usr/local/mysql/mysqld.pid
Slave 配置:
[root@SQL-S1 ~]# vim /etc/my.cnf [client] port=3306 socket= /usr/local/mysql/mysql.sock default-character-set = utf8 [mysql] no-auto-rehash prompt=Slave>\_ [mysqld] user = mysql port = 3306 socket = /usr/local/mysql/mysql.sock basedir = /usr/local/mysql datadir = /usr/local/mysql/data character-set-server = utf8 skip-character-set-client-handshake init-connect = 'SET NAMES utf8' open_files_limit=1024 back_log = 600 max_connections = 800 max_connect_errors = 3000 table_cache = 614 external-locking = FALSE max_allowed_packet =8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 2M query_cache_limit = 1M query_cache_min_res_unit = 2k thread_stack = 192K tmp_table_size = 2M max_heap_table_size = 2M server-id = 2 <<--- id 為 2 relay-log =/usr/local/mysql/data/relay-bin <<--- 開啟 relay log relay-log-info-file = /usr/local/mysql/data/relay-log.info key_buffer_size = 16M read_buffer_size = 1M read_rnd_buffer_size = 1M bulk_insert_buffer_size = 1M lower_case_table_names = 1 skip-name-resolve slave-skip-errors = 1032,1062,1007,1008,1050 replicate-ignore-db=mysql innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 16M innodb_file_io_threads = 4 innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 2M innodb_log_file_size = 4M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_file_per_table = 0 [mysqldump] quick max_allowed_packet = 2M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
Master 端準備數(shù)據(jù)和創(chuàng)建復(fù)制用戶
[root@SQL-M ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.55-log MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. Master> ster> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | school | +--------------------+ 4 rows in set (0.00 sec) Master> use school; Database changed Master> Master> show tables; +------------------+ | Tables_in_school | +------------------+ | student | | test01 | | test02 | +------------------+ 3 rows in set (0.00 sec) Master> select * from student; +----+--------+-----+-----+ | id | name | sex | age | +----+--------+-----+-----+ | 1 | 小東 | 男 | 0 | | 3 | 小北 | 女 | 12 | +----+--------+-----+-----+ 2 rows in set (0.00 sec) Master> grant replication slave on *.* to rep@'192.168.0.%' identified by '123'; # 創(chuàng)建專門用于主從復(fù)制的用戶 Query OK, 0 rows affected (0.00 sec) Master> select user,host from mysql.user; +------+-------------+ | user | host | +------+-------------+ | root | 127.0.0.1 | | rep | 192.168.0.% | | root | localhost | +------+-------------+ 3 rows in set (0.00 sec) Master> show grants for replicaton@'192.168.0.%'; ERROR 1141 (42000): There is no such grant defined for user 'replicaton' on host '192.168.0.%' Master> show grants for rep@'192.168.0.%'; +--------------------------------------------------------------------------------------------------------------------------+ | Grants for rep@192.168.0.% | +--------------------------------------------------------------------------------------------------------------------------+ | GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.0.%' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' | +--------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
slave 端沒有數(shù)據(jù),處于初始狀態(tài)
[root@SQL-S1 ~]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.55 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. Slave01> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec)
master 端用 mysqldump 導(dǎo)出數(shù)據(jù)
由于 mysqldump 是邏輯備份程序,所以要確保 MySQL 服務(wù)是啟動狀態(tài)。
[root@SQL-M ~]# mysqldump -uroot -p -A -B -F --master-data=1 --events >/tmp/sql_full_back.sql Enter password: [root@SQL-M ~]# ll -h /tmp/ total 152K -rw-r--r-- 1 root root 151K Apr 23 12:48 sql_full_back.sql
mysqldump 參數(shù):
-A 備份所有庫表 -B 在導(dǎo)出的 sql 文件里加入建庫語句,從庫導(dǎo)入文件時就省事很多 -F 刷新 bin log,這個在增量恢復(fù)時有用 --master-data=1 這個參數(shù)的作用是在導(dǎo)出的 sql 文件里會加入一條語句“CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxxxxx', MASTER_LOG_POS=xxx;” ,這樣在從庫導(dǎo)入數(shù)據(jù)后執(zhí)行 CHANGE MASTER 時就不用加上bin-log和pos值了;=2 則是注釋。 --events 忽略警告 Warning: Skipping the data of table mysql.event. Specify the --events option explicitly. 數(shù)據(jù)量大可以備份時gzip壓縮: mysqldump -uroot -p -A -B -F --master-data=1 --events|gzip >/tmp/sql_full_back.sql.gz
把備份文件 scp 到從庫
[root@SQL-M ~]# scp /tmp/sql_full_back.sql 192.168.0.90:/tmp/ The authenticity of host '192.168.0.90 (192.168.0.90)' can't be established. RSA key fingerprint is fb:9f:50:cd:ac:59:8b:a3:83:83:95:7c:62:d1:64:d2. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.90' (RSA) to the list of known hosts. root@192.168.0.90's password: sql_full_back.sql 100% 546KB 546.1KB/s 00:00
從庫導(dǎo)入備份文件并檢查
[root@SQL-S1 ~]# ll /tmp/ total 548 -rw-r--r-- 1 root root 559192 Apr 23 13:10 sql_full_back.sql [root@SQL-S1 ~]# [root@SQL-S1 ~]# mysql -uroot -p </tmp/sql_full_back.sql Enter password: [root@SQL-S1 ~]# mysql -uroot -p # 登錄檢查一下 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.5.55 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. Slave> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | school | +--------------------+ 4 rows in set (0.00 sec) Slave> Slave> use school; Database changed Slave> show tables; +------------------+ | Tables_in_school | +------------------+ | student | | test01 | | test02 | +------------------+ 3 rows in set (0.00 sec) Slave> select * from student; +----+--------+-----+-----+ | id | name | sex | age | +----+--------+-----+-----+ | 1 | 小東 | 男 | 0 | | 3 | 小北 | 女 | 12 | +----+--------+-----+-----+ 2 rows in set (0.00 sec)
從庫導(dǎo)入備份文件檢查成功后 CHANGE MASTER
Slave> CHANGE MASTER TO MASTER_HOST='192.168.0.88',MASTER_PORT=3306,MASTER_USER='rep',MASTER_PASSWORD='123'; Query OK, 0 rows affected (0.01 sec) Slave> start slave; # 啟動 slave Query OK, 0 rows affected (0.00 sec) Slave> show slave status\G # 查看狀態(tài) *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.88 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000016 Read_Master_Log_Pos: 297 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000016 Slave_IO_Running: Yes <<--- 正常 Slave_SQL_Running: Yes <<--- 正常 Replicate_Do_DB: Replicate_Ignore_DB: mysql Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 297 Relay_Log_Space: 403 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 <<--- 沒有延遲 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 1 row in set (0.00 sec)
slave 的狀態(tài)判斷:
Slave_IO_Running: Yes # IO線程負責(zé)與主庫通信傳輸數(shù)據(jù) Slave_SQL_Running: Yes # SQL線程,讀取中繼日志(rely-log),再把數(shù)據(jù)寫入本地存儲 Seconds_Behind_Master: 0 # 延遲時間,從主獲取數(shù)據(jù)的延遲時間,
這三個參數(shù)是主從復(fù)制健康檢查的監(jiān)控的重點。
主庫查看線程狀態(tài)
Master> show processlist; +----+------+--------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+--------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ | 27 | root | localhost | NULL | Query | 0 | NULL | show processlist | | 29 | rep | 192.168.0.90:64017 | NULL | Binlog Dump | 497 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL | +----+------+--------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ 2 rows in set (0.00 sec)
測試主從復(fù)制
Master 添加數(shù)據(jù)
Master> use school; Database changed Master> select * from student; +----+--------+-----+-----+ | id | name | sex | age | +----+--------+-----+-----+ | 1 | 小東 | 男 | 0 | | 3 | 小北 | 女 | 12 | +----+--------+-----+-----+ 2 rows in set (0.00 sec) Master> insert into student values(4,'楠楠','男',15); # 插入新數(shù)據(jù) Query OK, 1 row affected (0.00 sec) Master> select * from student; +----+--------+-----+-----+ | id | name | sex | age | +----+--------+-----+-----+ | 1 | 小東 | 男 | 0 | | 3 | 小北 | 女 | 12 | | 4 | 楠楠 | 男 | 15 | +----+--------+-----+-----+ 3 rows in set (0.00 sec)
Slave 端檢查
Slave> use school; Database changed Slave> show tables; +------------------+ | Tables_in_school | +------------------+ | student | | test01 | | test02 | +------------------+ 3 rows in set (0.00 sec) Slave> select * from student; +----+--------+-----+-----+ | id | name | sex | age | +----+--------+-----+-----+ | 1 | 小東 | 男 | 0 | | 3 | 小北 | 女 | 12 | | 4 | 楠楠 | 男 | 15 | <<---- 可以看到新的數(shù)據(jù)已經(jīng)復(fù)制到位 +----+--------+-----+-----+ 3 rows in set (0.00 sec)
以上主從復(fù)制配置完成
===================== 開啟半同步模式 =========================
主從復(fù)制實際是異步的過程:
Master IO_thread --> Slave IO_thread -->Slave SQL_thread -->Slave localdisk
Master IO_thread 把數(shù)據(jù)交給 Slave IO_thread 之后就不管了,后面的數(shù)據(jù)存儲有沒有成功Master是不知道的,這樣對數(shù)據(jù)來說顯然是不夠安全的,無法保證數(shù)據(jù)完整正確地存儲在Slave端。
半同步復(fù)制
介于異步復(fù)制和全同步復(fù)制之間,主庫在執(zhí)行完客戶端提交的事務(wù)后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay log中才返回給客戶端。相對于異步復(fù)制,半同步復(fù)制提高了數(shù)據(jù)的安全性,同時它也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。所以,半同步復(fù)制最好在低延時的網(wǎng)絡(luò)中使用。
半同步是以已經(jīng)實現(xiàn)主從復(fù)制為前提,并且MySQL版本為5.5及以上。
實現(xiàn)半同步的插件:
[root@SQL-M ~]# ll /usr/local/mysql/lib/plugin/ -rwxr-xr-x 1 mysql mysql 170878 Mar 18 13:14 semisync_master.so -rwxr-xr-x 1 mysql mysql 88959 Mar 18 13:14 semisync_slave.so
很清楚,一個Master用的,一個Slave用的。
Master 端操作
Master> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; # 安裝插件 Query OK, 0 rows affected (0.13 sec) Master> SET GLOBAL rpl_semi_sync_master_enabled = 1; # 啟用插件 Query OK, 0 rows affected (0.00 sec) Master> show status like 'Rpl_semi_sync_master_status'; +-----------------------------+-------+ | Variable_name | Value | +-----------------------------+-------+ | Rpl_semi_sync_master_status | ON | +-----------------------------+-------+ 1 row in set (0.00 sec) Master> show variables like 'rpl%'; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | rpl_recovery_rank | 0 | | rpl_semi_sync_master_enabled | ON | | rpl_semi_sync_master_timeout | 10000 | <<--- 默認超時,單位毫秒;數(shù)據(jù)傳輸超時會自動轉(zhuǎn)為異步復(fù)制,傳輸正常后會自動恢復(fù)為半同步。 | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_no_slave | ON | +------------------------------------+-------+ 5 rows in set (0.00 sec) Master> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%'; +----------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +----------------------+---------------+ | rpl_semi_sync_master | ACTIVE | +----------------------+---------------+ 1 row in set (0.00 sec) Master> show status like 'rpl%'; +--------------------------------------------+-------------+ | Variable_name | Value | +--------------------------------------------+-------------+ | Rpl_semi_sync_master_clients | 0 | <<--- 還沒有從庫連接 | Rpl_semi_sync_master_net_avg_wait_time | 0 | | Rpl_semi_sync_master_net_wait_time | 0 | | Rpl_semi_sync_master_net_waits | 0 | | Rpl_semi_sync_master_no_times | 0 | | Rpl_semi_sync_master_no_tx | 0 | | Rpl_semi_sync_master_status | ON | | Rpl_semi_sync_master_timefunc_failures | 0 | | Rpl_semi_sync_master_tx_avg_wait_time | 0 | | Rpl_semi_sync_master_tx_wait_time | 0 | | Rpl_semi_sync_master_tx_waits | 0 | | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | | Rpl_semi_sync_master_wait_sessions | 0 | | Rpl_semi_sync_master_yes_tx | 0 | | Rpl_status | AUTH_MASTER | +--------------------------------------------+-------------+ 15 rows in set (0.00 sec)
Slave 端操作
Slave> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; # 安裝slave插件 Query OK, 0 rows affected (0.11 sec) Slave> SET GLOBAL rpl_semi_sync_slave_enabled = 1; # 啟用插件 Query OK, 0 rows affected (0.00 sec) Slave> show status like 'Rpl_semi_sync_slave_status'; +----------------------------+-------+ | Variable_name | Value | +----------------------------+-------+ | Rpl_semi_sync_slave_status | OFF | +----------------------------+-------+ 1 row in set (0.00 sec) Slave> stop slave; # 重啟slave Query OK, 0 rows affected (0.00 sec) Slave> start slave; Query OK, 0 rows affected (0.00 sec) Slave> show status like 'Rpl_semi_sync_slave_status'; +----------------------------+-------+ | Variable_name | Value | +----------------------------+-------+ | Rpl_semi_sync_slave_status | ON | +----------------------------+-------+ 1 row in set (0.00 sec) Slave> show status like 'rpl%'; +----------------------------+-------------+ | Variable_name | Value | +----------------------------+-------------+ | Rpl_semi_sync_slave_status | ON | | Rpl_status | AUTH_MASTER | +----------------------------+-------------+ 2 rows in set (0.00 sec) Slave> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%'; +---------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +---------------------+---------------+ | rpl_semi_sync_slave | ACTIVE | +---------------------+---------------+ 1 row in set (0.00 sec)
Master端檢查從庫連接情況
Master> show status like 'rpl%'; +--------------------------------------------+-------------+ | Variable_name | Value | +--------------------------------------------+-------------+ | Rpl_semi_sync_master_clients | 1 | <<--- 可以看到有一個從庫已經(jīng)成功連接 | Rpl_semi_sync_master_net_avg_wait_time | 0 | | Rpl_semi_sync_master_net_wait_time | 0 | | Rpl_semi_sync_master_net_waits | 0 | | Rpl_semi_sync_master_no_times | 0 | | Rpl_semi_sync_master_no_tx | 0 | | Rpl_semi_sync_master_status | ON | | Rpl_semi_sync_master_timefunc_failures | 0 | | Rpl_semi_sync_master_tx_avg_wait_time | 0 | | Rpl_semi_sync_master_tx_wait_time | 0 | | Rpl_semi_sync_master_tx_waits | 0 | | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | | Rpl_semi_sync_master_wait_sessions | 0 | | Rpl_semi_sync_master_yes_tx | 0 | | Rpl_status | AUTH_MASTER | +--------------------------------------------+-------------+ 15 rows in set (0.00 sec)
半同步測試
正常情況下master插入數(shù)據(jù)的速度很快
Master> insert into student values(6,'小欣','女',13);
Query OK, 1 row affected (0.00 sec) <<--- 速度很快
Master> insert into student values(7,'小倩','女',13);
Query OK, 1 row affected (0.00 sec) <<--- 一樣
接下來模仿從庫故障,停掉slave的 IO 線程
Slave> stop slave io_thread;
Query OK, 0 rows affected (0.00 sec)
Master 再插入數(shù)據(jù)
Master> insert into student values(8,'姍姍','女',13);
Query OK, 1 row affected (10.00 sec) <<--- 超時了,自動轉(zhuǎn)為異步
從庫恢復(fù)正常
Slave> start slave io_thread;
Query OK, 0 rows affected (0.00 sec)
主庫插入數(shù)據(jù)
Master> insert into student values(9,'小強','男',13);
Query OK, 1 row affected (0.00 sec) <<--- 自動恢復(fù)為半同步了
============================================================
到此半同步配置完成
對于以上關(guān)于MySQL-5.5主從復(fù)制原理是什么及如何配置,大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會喜歡上這些內(nèi)容的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。