Làm thế nào tôi có thể di chuyển cơ sở dữ liệu từ máy chủ này sang máy chủ khác?


136

Làm cách nào tôi có thể di chuyển các bảng MySQL từ máy chủ vật lý này sang máy chủ khác?

Chẳng hạn như kịch bản chính xác này: Tôi có một máy chủ MySQL sử dụng bảng innodb và có kích thước khoảng 20 GB.

Tôi muốn chuyển nó sang một máy chủ mới, cách hiệu quả nhất để làm điều này là gì?


4
Tôi sẽ sử dụng xtrabackup percona.com/docs/wiki/. Nó rất giống như sao chép nó nhưng bạn có thể giữ máy chủ chạy và giả sử bạn sử dụng các bảng innodb chủ yếu (mà bạn nói bạn đã có), bạn có thể coi đó là "nóng" sao lưu là tốt.
Jonathan

Tôi không được hưởng lợi từ những người khác sử dụng công cụ này. Nó miễn phí / nguồn mở và mặc dù nó được tạo bởi một công ty, nhưng nó đủ dễ sử dụng mà bạn không cần phải xem xét hỗ trợ mua từ công ty đó.
Jonathan

Câu trả lời:


80

Cách ưa thích của tôi là chuyển một lệnh sqldump thành một lệnh sql. Bạn có thể làm tất cả các cơ sở dữ liệu hoặc một cơ sở cụ thể. Vì vậy, ví dụ,

mysqldump -uuser -ppassword myDatabase | mysql -hremoteserver -uremoteuser -premoteserverpassword 

Bạn có thể làm tất cả các cơ sở dữ liệu với

mysqldump --all-databases -uuser -ppassword | mysql -hremoteserver -uremoteuser -premoteserver 

Vấn đề duy nhất là khi cơ sở dữ liệu quá lớn và đường ống bị sập. Trong trường hợp đó, bạn có thể thực hiện theo bảng hoặc bất kỳ phương pháp nào khác được đề cập dưới đây.


4
Mẹo: Nếu không có cơ sở dữ liệu nào cho phép kết nối từ xa, hãy chuyển qua netcat.
Bart van Heukelom

1
Để làm việc này với tôi, tôi phải tạo một cơ sở dữ liệu trống có cùng tên trên máy chủ từ xa và sau đó thêm tên của cơ sở dữ liệu đó vào cuối lệnh.
Zugwalt

1
Điều này là thanh lịch, nhưng không nén hầu như không đủ nhanh cho cơ sở dữ liệu 20GB.
Daddy32

Giải pháp này chỉ tốt cho một mạng được kiểm soát hoàn toàn (nếu và chỉ khi trên một mạng riêng an toàn, hãy đọc: không phải internet)! Nhưng giải pháp nhanh chóng và dễ dàng!
tdaget

Đây là nhanh như chớp! Nhưng những gì @Zugwalt nói cũng đúng với tôi. Lệnh không hoạt động cho đến khi tôi đã tạo cơ sở dữ liệu (trống) thêm tên cơ sở dữ liệu vào cuối lệnh.
Xiên

65

Gần đây tôi đã chuyển một cơ sở dữ liệu 30 GB với sự ổn định sau:

Máy chủ cũ

  • Dừng máy chủ mysql
  • Sao chép nội dung của datadir sang một vị trí khác trên đĩa ( ~/mysqldata/*)
  • Khởi động lại máy chủ mysql (thời gian chết là 10-15 phút)
  • nén dữ liệu ( tar -czvf mysqldata.tar.gz ~/mysqldata)
  • sao chép tập tin nén vào máy chủ mới

Máy chủ mới

  • cài đặt mysql (không bắt đầu)
  • giải nén tệp nén ( tar -xzvf mysqldata.tar.gz)
  • chuyển nội dung của mysqldata sang datadir
  • Đảm bảo innodb_log_file_size của bạn giống nhau trên máy chủ mới hoặc nếu không, đừng sao chép các tệp nhật ký cũ ( mysql sẽ tạo các tệp này )
  • Bắt đầu mysql

1
Bỏ qua bản sao sau khi nén / giải nén. Truyền phát tar qua mạng bằng ssh hoặc (nếu và chỉ khi trên mạng riêng an toàn đọc: không phải internet) sử dụng netcat để tránh phí mã hóa. Ngoài ra, nếu trên mạng cục bộ bỏ qua gzipping, nếu bạn có đường ống mạng nhanh, bạn sẽ thấy nút truyền bị tắc nghẽn trên một lõi quay được chốt khi thực hiện nén
atxdba

Điều này làm việc cho cả innodb và myisam? Ngoài ra, người dùng mysql cũng ở trong datadir?
giorgio79

2
@ giorgio79 chắc chắn miễn là bạn di chuyển các tệp ibdata. Theo mặc định đó là trong datadir. Người dùng MySQL được lưu trữ trong thư mục mysql trong không gian bảng người dùng.
Derek Downey

2
Quy trình này có hoạt động để chuyển từ Windows sang Linux không?
ypercubeᵀᴹ

2
@ TypoCubeᵀᴹ xin lỗi vì mất hơn hai năm để trả lời, nhưng nó sẽ giúp tôi có người nói dứt khoát: "Vâng, nó hoạt động từ Windows sang Linux". Trong trường hợp của tôi, tôi đã chuyển từ Windows Server 2012 R2 sang Cent OS (Red Hat 4.8.5-11) . Phiên bản mysql cụ thể là Maria DB 10.1 . Theo quy định, tôi đã dừng cả hai dịch vụ mysql, kết nối thư mục dữ liệu và khi bắt đầu dịch vụ mysql trên máy chủ mới, tất cả các cơ sở dữ liệu, bảng cơ sở dữ liệu và người dùng cơ sở dữ liệu đều hoàn toàn nguyên vẹn.
WEBjuju

30

Theo Hướng dẫn nghiên cứu chứng chỉ MySQL 5.0 , Chương 32 Mục 32.3.4, Trang 456.457 mô tả các Điều kiện cho tính di động nhị phân đưa ra các điều sau:

Tính di động nhị phân rất quan trọng nếu bạn muốn sao lưu nhị phân được tạo trên một máy và sử dụng nó trên một máy khác có kiến ​​trúc khác. Ví dụ: sử dụng sao lưu nhị phân là một cách để sao chép cơ sở dữ liệu từ máy chủ MySQL này sang máy chủ MySQL khác.

Đối với MyISAM, tính di động nhị phân có nghĩa là bạn có thể sao chép trực tiếp các tệp cho bảng MyISAM từ máy chủ MySQL này sang máy chủ khác trên máy khác và máy chủ thứ hai sẽ có thể truy cập vào bảng.

Đối với InnoDB, tính di động nhị phân có nghĩa là bạn có thể sao chép trực tiếp các tệp vùng bảng từ máy chủ MySQL trên máy này sang máy chủ khác trên máy khác và máy chủ thứ hai sẽ có thể truy cập vào vùng bảng. Theo mặc định, tất cả các bảng InnoDB được quản lý bởi một máy chủ được lưu trữ cùng nhau trong không gian bảng, do đó tính di động của không gian bảng là một chức năng cho dù tất cả các bảng InnoDB riêng lẻ đều có thể di động được. Nếu thậm chí một bảng không thể di động, thì cũng không phải là không gian bảng.

Các bảng MyISAM và các không gian bảng InnoDB là di động nhị phân từ máy chủ này sang máy chủ khác nếu hai điều kiện được đáp ứng:

  • Cả hai máy phải sử dụng số học số nguyên bổ sung của hai
  • Cả hai máy phải sử dụng định dạng dấu phẩy động của IEEE hoặc các bảng khác không được chứa các cột dấu phẩy động (FLOAT hoặc NHÂN ĐÔI)

Trong thực tế, hai điều kiện đó đặt ra hạn chế nhỏ. Số học hai số nguyên bổ sung và định dạng dấu phẩy động của IEEE là chuẩn mực trên phần cứng hiện đại. Điều kiện thứ ba cho tính di động nhị phân của InnoDB là bạn nên sử dụng tên viết thường cho các bảng và cơ sở dữ liệu. Điều này là do InnoDB lưu trữ các tên này trong nội bộ (trong từ điển dữ liệu của nó) bằng chữ thường trên Windows. Sử dụng tên chữ thường cho phép tính di động nhị phân giữa Windows và Unix, để buộc sử dụng tên chữ thường, bạn có thể đặt các dòng sau vào một tệp tùy chọn:

[mysqld]
lower_case_table_names=1

Nếu bạn định cấu hình InnoDB để sử dụng các không gian bảng trên mỗi bảng, các điều kiện cho tính di động nhị phân được mở rộng để bao gồm các tệp .ibd cho các bảng InnoDB. (Các điều kiện cho các không gian bảng được chia sẻ vẫn được áp dụng vì nó chứa từ điển dữ liệu lưu trữ thông tin về tất cả các bảng InnoDB.)

Nếu các điều kiện cho tính di động nhị phân không được thỏa mãn, bạn có thể sao chép các bảng MyISAM hoặc InnoDB từ máy chủ này sang máy chủ khác bằng cách bỏ chúng bằng cách sử dụng một số định dạng văn bản (ví dụ: với mysqldump) và tải lại chúng vào máy chủ đích.

Có hai cách chính dựa trên công cụ lưu trữ để di chuyển các bảng riêng lẻ.

Đối với ví dụ đã cho, chúng tôi sẽ giả sử như sau:

  1. datadir là / var / lib / mysql
  2. cơ sở dữ liệu được gọi là mydb
  3. bảng trong cơ sở dữ liệu mydb gọi là mytable .

Bảng MyISAM

Nếu mydb.mytable sử dụng công cụ lưu trữ MyISAM, bảng sẽ được hiển thị dưới dạng ba tệp riêng biệt

  1. /var/lib/mysql/mydb/mytable.frm (tệp .frm)
  2. /var/lib/mysql/mydb/mytable.MYD (tệp .MYD)
  3. /var/lib/mysql/mydb/mytable.MYI (tệp .MYI)

.Mfm chứa cấu trúc
bảng
.MYD chứa dữ liệu bảng .MYI chứa trang chỉ mục bảng

Các tệp này được sử dụng phụ thuộc lẫn nhau để thể hiện bảng theo quan điểm logic trong mysql. Vì các tệp này không có liên kết logic nào kèm theo nó, nên di chuyển một bảng từ máy chủ DB này sang máy chủ DB khác. Bạn thậm chí có thể làm điều này từ máy chủ Windows đến Máy chủ Linux hoặc MacOS. Tất nhiên, bạn có thể tắt mysql và sao chép 3 tệp bảng. Bạn có thể chạy như sau:

LOCK TABLES mydb.mytable READ;
SELECT SLEEP(86400);
UNLOCK TABLES;

trong một phiên ssh để giữ bảng dưới dạng chỉ đọc và giữ khóa trong 24 giờ. Một giây sau, thực hiện sao chép trong một phiên ssh khác. Sau đó, giết phiên mysql với khóa 24 giờ. Bạn không cần đợi 24 giờ.

Bảng InnoDB

Dựa trên trích dẫn đã nói ở trên từ Chứng nhận, có nhiều yếu tố chi phối cách sao lưu một bảng InnoDB cụ thể. Để đơn giản, rõ ràng và ngắn gọn, chỉ cần thực hiện một mysqldump của bảng mong muốn bằng cách sử dụng các tham số giao dịch --single để có kết xuất thời gian hoàn hảo của bảng. Không cần phải tự khắc với ngữ nghĩa của InnoDB nếu bạn chỉ muốn một bảng. Bạn có thể tải lại tệp tin đó vào bất kỳ máy chủ MySQL nào bạn chọn.

Vì hai câu hỏi đã được hợp nhất ở đây (jcolebrand): EDIT

Nếu bạn sẵn sàng sống với hiệu suất DB chậm, bạn có thể thực hiện một loạt rsyncs từ máy chủ cũ (ServerA) đến máy chủ mới (ServerB) ngay cả khi mysql vẫn đang chạy trên ServerA.

Bước 01) cài đặt cùng một phiên bản mysql trên ServerB mà ServerA có

Bước 02) Trên ServerA, chạy SET GLOBAL innodb_max_dirty_pages_pct = 0;từ mysql và khoảng 10 phút (Thao tác này sẽ xóa các trang bẩn từ Nhóm bộ đệm InnoDB. Nó cũng giúp thực hiện tắt máy mysql nhanh hơn) Nếu cơ sở dữ liệu của bạn là MyISAM, bạn có thể bỏ qua bước này.

Bước 03) rsync --archive --verbose --stats --partial --progress --human-readable ServerA:/var/lib/mysql ServerB:/var/lib/mysql

Bước 04) Lặp lại Bước 03 cho đến khi rsync mất ít hơn 1 phút

Bước 05) service mysql stoptrên ServerA

Bước 06) Thực hiện thêm một rsync

Bước 07) scp ServerA:/etc/my.cnf ServerB:/etc/

Bước 08) service mysql starttrên ServerB

Bước 08) service mysql starttrên ServerA (tùy chọn)

Hãy thử một lần !!!

CẨN THẬN

Bạn có thể tạo một nô lệ sao chép như thế này. Chỉ cần nhớ cài đặt id máy chủ trong master /etc/my.cnf và một số khác cho id máy chủ trong nô lệ /etc/my.cnf


29

Bạn thậm chí không cần mysqldump nếu bạn đang di chuyển toàn bộ lược đồ cơ sở dữ liệu và bạn sẵn sàng dừng cơ sở dữ liệu đầu tiên (để nó phù hợp khi được chuyển)

  1. Dừng cơ sở dữ liệu (hoặc khóa nó)
  2. Chuyển đến thư mục chứa các tệp dữ liệu mysql.
  3. Chuyển qua thư mục (và nội dung của nó) sang thư mục dữ liệu mysql của máy chủ mới
  4. Bắt đầu sao lưu cơ sở dữ liệu
  5. Trên máy chủ mới, ban hành lệnh 'tạo cơ sở dữ liệu'. '
  6. Tạo lại người dùng và cấp quyền.

Tôi không thể nhớ nếu mysqldump xử lý người dùng và quyền, hay chỉ là dữ liệu ... nhưng ngay cả nếu có, đây là cách nhanh hơn so với làm một bãi chứa & chạy nó. Tôi chỉ sử dụng nếu tôi cần kết xuất cơ sở dữ liệu mysql để sau đó chèn lại vào một số RDBMS khác, nếu tôi cần thay đổi tùy chọn lưu trữ (innodb so với myisam) hoặc có thể nếu tôi đang thay đổi các phiên bản chính của mysql (nhưng Tôi nghĩ rằng tôi đã làm điều này giữa 4 và 5, mặc dù)


Điều này là hiệu quả hơn, đặc biệt nếu một là một sysadmin / DBA. Mysqldump BTW bằng cách sử dụng --all-databaseslược đồ mysql. Khởi động mysql trên máy tiếp theo sẽ hiển thị các quyền với điều kiện bạn đã chuyển thư mục dữ liệu sang máy khác có cùng bản phát hành chính của MySQL. (MySQL 5.5.x đến MySQL 5.5.x, MySQL 5.1.x sang MySQL 5.1.x, MySQL 5.0.x đến MySQL 5.0.x)
RolandoMyQueryDBA

4
@Joe, vâng, mysqldumpxử lý người dùng và quyền, vì những điều này được lưu trữ trong mysqllược đồ.
Shlomi Noach

Cách tiếp cận này đặc biệt hữu ích với lưu trữ đám mây, như AWS. Bạn có thể dừng mysql, ngắt kết nối và tách khỏi máy chủ hiện tại; đính kèm và gắn kết với máy chủ mới và bắt đầu mysql. Không có chi phí sao chép nếu khối lượng vẫn ở cùng trang trại máy chủ.
LateralFractal

12

Nếu bạn chỉ muốn di chuyển một bảng cụ thể, hãy thử:

mysqldump -u username -ppassword databasename tablename > databasename.tablename.sql

Bạn có thể chỉ định thêm tên bảng ở trên, trong cùng một lệnh. Khi lệnh hoàn thành, di chuyển tệp databasename.tablename.sql sang máy chủ khác và sau đó khôi phục bằng cách sử dụng:

mysql -u username -ppassword databasename < databasename.tablename.sql

Lưu ý rằng tệp .sql trở lại được tạo bằng chương trình mysqldump và việc khôi phục được thực hiện trực tiếp vào mysql .


7
  1. Nếu bạn có quyền truy cập ssh, bạn có thể sử dụng mysqldump từ dòng lệnh
  2. Nếu bạn không có quyền truy cập ssh nhưng bạn có quyền truy cập phpMyAdmin, bạn có thể sử dụng nó để xuất / nhập
  3. Nếu bạn không có quyền truy cập phpMyAdmin, có một số tập lệnh php tiện dụng sẽ kết xuất và nhập (tuy nhiên nói theo kinh nghiệm của riêng tôi, tôi chưa bao giờ tìm thấy tập lệnh nào đáng tin cậy như phpMyAdmin).

Có thể có khả năng này khi bạn di chuyển các tệp cơ sở dữ liệu thực tế (đối với cài đặt của tôi, chúng được đặt tại / var / lib / mysql), nhưng tôi không thực sự chắc chắn về cách nó sẽ hoạt động / xử lý.


5

Bạn sẽ cần phải có một thời gian chết. Sẽ mất một chút thời gian tùy thuộc vào tốc độ mạng của bạn. Tôi sẽ giả định MySQL đang chạy của bạn trên Linux / Unix. Đây là quá trình tôi sử dụng:

  1. Dừng trình nền mysql trên máy chủ nguồn.
  2. Tạo một thư mục tmp trên máy chủ đích của bạn để nhận các tệp.
  3. Sử dụng màn hình để tạo một phiên shell sẽ tồn tại nếu ssh của bạn bị ngắt kết nối.
  4. Sử dụng rsync để chuyển các tập tin giữa các máy chủ. Một cái gì đó như: rsync -avhP nguồn người dùng @ targethost: / path / to / thư mục /
  5. Chạy các trường hợp thử nghiệm của bạn để đảm bảo bạn không mất gì trong chuyển khoản.

Sau đó tiến hành như bình thường khi thiết lập MySQL cục bộ.

* Lưu ý: bạn cũng có thể sử dụng tham số -c với rsync để thêm tổng kiểm tra vào quá trình chuyển, tuy nhiên điều này sẽ chậm hơn tùy thuộc vào tốc độ CPU.


4

Tôi có thể xác nhận rằng phương pháp của DTest cũng hoạt động để sao chép giữa ubfox và osx.

Để sao chép tất cả các cơ sở dữ liệu mà không phải thực hiện bất kỳ việc bán phá giá hoặc tương tự:

Hãy chắc chắn rằng bạn có một mysql sạch của mysql (đã cài đặt dmg được tải xuống từ mysql http://cdn.mysql.com/Doads/MyQuery-5.1/mysql-5.1.63-osx10.6-x86_64.dmg ), rằng (RẤT QUAN TRỌNG) chưa bao giờ được chạy.

Sao chép nội dung thư mục / var / lib / mysql / từ máy ubfox trên đầu trang / usr / local / mysql / data / trên mac. Để có quyền truy cập để lấy thư mục trên máy ubfox, tôi phải sử dụng sudo tức là:

sudo cp /var/lib/mysql /home/foouser/mysql_data_folder
sudo chown -R foouser /home/foouser/mysql_data_folder

Tôi đã sao chép thư mục bằng scp.

Trước khi bạn bắt đầu lấy một bản sao của thư mục mysql trên mac để đảm bảo bạn không làm hỏng bất cứ điều gì.

Sau khi sao chép thư mục, hãy làm như sau trên máy mac:

sudo chown -R _mysql /usr/local/mysql/data/
sudo chgrp -R wheel /usr/local/mysql/data/
sudo chmod -R g+rx /usr/local/mysql/data/

Khởi động máy chủ mysql lần đầu tiên (từ khung tùy chọn bên dưới Tùy chọn hệ thống-> mysql). Tất cả người dùng và cơ sở dữ liệu nên được thiết lập chính xác.

Điều này đã làm việc với mysql 5.1.61 trên Ubuntu 64 bit 11.10 và mysql 5.1.63 trên osx Lion (macbook pro).


4

Tôi nghĩ rằng tất cả các câu trả lời trước đó có thể hoạt động tốt, nhưng không thực sự giải quyết vấn đề đặt tên cơ sở dữ liệu trong quá trình chuyển.

Đây là cách tôi vừa làm với bash:

Bạn có thể sử dụng rsynctốt hơn scpvà không nén tệp nếu bạn thường xuyên làm việc này.

Trên máy chủ nguồn của tôi:

me@web:~$ d=members
me@web:~$ mysqldump $d | gzip > $d.sql.gz
me@web:~$ scp -i .ssh/yourkeynamehere $d.sql.gz $sbox:$d.sql.gz

Trên máy chủ đích của tôi:

me@sandbox:~$ d1=members
me@sandbox:~$ d2=members_sb
me@sandbox:~$ mysqladmin create $d2
me@sandbox:~$ cat $d1.sql.gz | gunzip |  mysql $d2

Trên một trong hai máy để xem tiến trình:

me@sandbox:~$ ls *.gz 
me@sandbox:~$ cat $d.sql.gz | gunzip |  less

Tất cả điều này giả sử bạn có tệp cấu hình MySQL trong thư mục chính của bạn trên cả hai máy và đặt quyền:

$ echo "
[client]
user=drupal6
password=metoknow
host=ord-mysql-001-sn.bananas.com
[mysql]
database=nz_drupal" > .my.cnf
$ chmod 0600 ~/.my.cnf

3

bạn đang di chuyển nó đến một db máy chủ mysql khác? Nếu vậy hãy sử dụng, xuất khẩu trên nó

# mysqldump -u username -ppassword database_name > FILE.sql

Mysqldump? Đó là khi bạn đang xử lý một lượng nhỏ dữ liệu?
Oh Chin Boon

2
Tôi nghĩ rằng nhỏ / lớn là khá chủ quan những ngày này. Khi tôi nhìn thấy tiêu đề của câu hỏi, tôi đã hy vọng rằng cơ sở dữ liệu sẽ lớn hơn rất nhiều so với 20gb để được coi là "lớn" ...
Aaron Bertrand

3

Phương pháp linux chung:

/etc/init.d/mysqld stop
rsync -avz source_files destination
vi /etc/my.cnf

chỉnh sửa datadir (và ổ cắm) cho cả mysqld và mysqld_safe (nếu có) để trỏ đến vị trí mới, sau đó

/etc/init.d/mysql start

Tôi đã đăng bài này vì dường như không ai chỉ đơn giản là liệt kê ra ít bước nhất để làm điều này và tôi cảm thấy đó là cách đơn giản nhất.


2

Có lẽ đây là một cách tốt hơn để làm điều đó:

Phiên bản 1 : sao chép tệp dữ liệu (chỉ MYISAM)

ssh server1
service mysql stop
cd $mysql-data-dir
rsync -avz dirs-or-files server2:$mysql-data-dir
service mysql start

ssh server2 khởi động lại dịch vụ mysql

  • Nếu các tệp cơ sở dữ liệu của bạn chỉ được đọc, bạn có thể bỏ qua việc dừng máy chủ.

Phiên bản 2 : mysqldump

Cài đặt pigz - trên các bộ xử lý Xeon hoặc Opteron hiện đại, đặc biệt là khi bạn có 2 CPU trở lên, nó NHIỀU nhanh hơn gzip.

ssh server1 
mysqldump ... | pigz > backup-YYMDD.sql.gz
rsync backup-YYMDD.sql.gz server:location

ssh server2
pigz -dc location/backup-YYMDD.sql.gz | mysql ..

Phiên bản 3 : master / Slave + mysqldump / file-copy

In HA environment you should use the following trick:
setup slave server & do all backups from it
before backups - do "slave stop"; 
then do version 1 or version 2

kịch bản:

touch full.start
mysqladmin -h slave-db stop-slave
echo "show slave status \G" | mysql -h slave-db > FULL/comfi-$NOW.master-position
/usr/bin/mysqldump -h slave-db --default-character-set=utf8 -A --opt --skip-lock-tables | pigz > "FULL/XXXX-$NOW.sql.gz"
mysqladmin -h slave-db start-slave
touch full.end

ln -fs "FULL/XXXX-$NOW.sql.gz" FULL.sql.gz

Tái bút

để sao chép các bảng nhỏ sử dụng:

ssh server1 bảng lược đồ mysqldump | lược đồ ssh server2 mysql


2

Tôi sẽ đề nghị hai bước đơn giản để chuyển toàn bộ cơ sở dữ liệu từ máy chủ này sang máy chủ khác.

Bước 1 : Thực hiện sao lưu toàn bộ cơ sở dữ liệu trong máy chủ nguồn bằng mysqldump .

Bước 2 : Bạn có thể sử dụng lệnh rsync để chuyển toàn bộ cơ sở dữ liệu đến máy chủ đích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.