MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Di chuyển Amazon RDS (MySQL hoặc MariaDB) sang máy chủ On-Prem

Amazon Web Services là một gã khổng lồ về công nghệ, đặc biệt là khi đi tiên phong trong các dịch vụ điện toán đám mây hàng đầu. Các sản phẩm dịch vụ được quản lý hoàn toàn của nó (Amazon RDS) là một trong những loại sản phẩm. Nhưng xin nhắc lại, mặc dù nó có thể là một nền tảng hoàn hảo cho một số tổ chức, nhưng nếu không phải là một nền tảng có thể là một thách thức. Luôn có những lo ngại về việc bị mắc kẹt trong tình huống khóa nhà cung cấp.

Một số điều cần lưu ý khi chuyển từ RDS sang nền tảng tại chỗ là các ràng buộc về ngân sách, bảo mật và quyền tự chủ về dữ liệu. Điều này là do dữ liệu là tài sản quý giá nhất của bạn và việc duy trì quyền kiểm soát ở bất kỳ nơi nào mà dữ liệu đó cư trú, nên tổ chức và công ty luôn duy trì tính cạnh tranh là điều bắt buộc. Không tổ chức nào có đủ khả năng để trang bị tính năng khóa đám mây, tuy nhiên, nhiều doanh nghiệp nhận thấy chính mình trong tình huống đó và bắt đầu tìm kiếm bất kỳ giải pháp thay thế hiện có nào có thể hoạt động thông qua tại chỗ.

Blog này sẽ hướng dẫn bạn cách di chuyển từ Amazon RDS sang máy chủ tại chỗ. Cơ sở dữ liệu mục tiêu của chúng tôi trên máy chủ tại chỗ nằm trên máy chủ RHEL / CentOS Linux, nhưng quy trình hiện hành sẽ áp dụng trên các phiên bản Linux khác cũng như các gói được cài đặt đúng cách.

Có một số giải pháp hiện có của bên thứ ba cung cấp tính năng di chuyển dữ liệu nhưng không áp dụng được cho nền tảng tại chỗ. Ngoài ra, nó không miễn phí và việc di chuyển bằng cách sử dụng miễn phí với các giải pháp nguồn mở luôn thuận lợi và thuận lợi. Mặc dù cũng có những nghi ngờ và lo ngại vì bảo hành và hỗ trợ không bị ràng buộc với các công nghệ mã nguồn mở nhưng chúng tôi sẽ chỉ cho bạn ở đây cách đạt được điều này một cách đơn giản.

Vì Amazon RDS hỗ trợ khả năng tương thích với MySQL và MariaDB. Chúng tôi sẽ tập trung vào chúng cho blog này.

Di chuyển từ Amazon RDS cho MySQL hoặc MariaDB

Cách tiếp cận điển hình để di chuyển dữ liệu của bạn từ Amazon RDS sang máy chủ tại chỗ là sao lưu bằng bản sao hợp lý. Điều này có thể được thực hiện bằng cách sử dụng các giải pháp tiện ích dự phòng tương thích để hoạt động với Amazon RDS, một dịch vụ được quản lý hoàn toàn. Các dịch vụ cơ sở dữ liệu được quản lý hoàn toàn không cung cấp thông tin đăng nhập SSH nên bản sao lưu vật lý không phải là một tùy chọn.

Sử dụng mysqldump

Sử dụng mysqldump phải được cài đặt trong nút cơ sở dữ liệu mục tiêu của bạn nằm tại chỗ. Nó phải được chuẩn bị như một bản sao của nút AWS RDS để tất cả các giao dịch tiếp theo sẽ được sao chép sang nút. Để thực hiện việc này, hãy làm theo các bước bên dưới.

Máy chủ nguồn AWS RDS :database-1.xxxxxxx.us-east-2.rds.amazonaws.com

Máy chủ lưu trữ trên máy chủ :192.168.10.226 (testnode26)

Trước khi bắt đầu kết xuất, hãy đảm bảo rằng số giờ lưu giữ trên binlog đã được đặt. Để đặt nó, bạn có thể thực hiện như lệnh gọi thủ tục mẫu bên dưới trong phiên bản Amazon RDS của bạn,

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);

Query OK, 2 rows affected (0.23 sec)



mysql> CALL mysql.rds_show_configuration;

+------------------------+-------+------------------------------------------------------------------------------------------------------+

| name                   | value | description                                                                                          |

+------------------------+-------+------------------------------------------------------------------------------------------------------+

| binlog retention hours | 24    | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |

+------------------------+-------+------------------------------------------------------------------------------------------------------+

1 row in set (0.23 sec)



Query OK, 0 rows affected (0.23 sec)

Cài đặt mysqldump

  1. Chuẩn bị kho lưu trữ.

# Đối với MySQL

$ yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

# Dành cho MariaDB

$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
  1. Cài đặt gói mysql-client

# Đối với MySQL

$ yum install -y mysql-community-client.x86_64

# Dành cho MariaDB

$ yum install -y MariaDB-client
  1. Tạo một kết xuất dữ liệu bằng cách sử dụng mysqldump bằng cách thực thi nó bên trong nút đích. Hãy lưu ý, với --master-data =2 được chỉ định làm tùy chọn, điều này chỉ hoạt động với MariaDB nhưng không hoạt động trong MySQL. Vì vậy, công việc bổ sung cho MySQL phải được thực hiện. Chúng ta sẽ nói về vấn đề này sau.

## Áp dụng cho phương pháp MariaDB

[[email protected] ~]# mysqldump -h database-1.xxxxxxx.us-east-2.rds.amazonaws.com -uadmin -p --single-transaction --master-data=2 --databases db1 db2 db3  > backups/dump.sql

Enter password:

[[email protected] ~]# ls -alth backups/dump.sql

-rw-r--r--. 1 root root 196M Oct 18 02:34 backups/dump.sql
  1. Cài đặt Máy chủ MySQL / MariaDB trong nút cơ sở dữ liệu đích

# Đối với MySQL (luôn kiểm tra kho phiên bản nào được bật trong kho lưu trữ yum của bạn. Tại thời điểm này, tôi đang sử dụng MySQL 5.7)

$ yum --disablerepo=* --enablerepo=mysql57-community install mysql-community-common mysql-community-client mysql-community-server

# Dành cho MariaDB

$ yum install MariaDB-server.x86_64
  1. Thiết lập phiên bản Máy chủ MySQL / MariaDB (my.cnf, quyền tệp, thư mục) và khởi động máy chủ

# Thiết lập my.cnf (sử dụng triển khai my.cnf của ClusterControl)

[MYSQLD]

user=mysql

basedir=/usr/

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

pid_file=/var/lib/mysql/mysql.pid

port=3306

log_error=/var/log/mysql/mysqld.log

log_warnings=2

slow_query_log_file=/var/log/mysql/mysql-slow.log

long_query_time=2

slow_query_log=OFF

log_queries_not_using_indexes=OFF

innodb_buffer_pool_size=2G

innodb_flush_log_at_trx_commit=2

innodb_file_per_table=1

innodb_data_file_path=ibdata1:100M:autoextend

innodb_read_io_threads=4

innodb_write_io_threads=4

innodb_doublewrite=1

innodb_log_file_size=256M

innodb_log_buffer_size=32M

innodb_buffer_pool_instances=1

innodb_log_files_in_group=2

innodb_thread_concurrency=0

innodb_flush_method=O_DIRECT

innodb_rollback_on_timeout=ON

innodb_autoinc_lock_mode=2

innodb_stats_on_metadata=0

default_storage_engine=innodb

server_id=1126

binlog_format=ROW

log_bin=binlog

log_slave_updates=1

relay_log=relay-bin

expire_logs_days=7

read_only=OFF

report_host=192.168.10.226

key_buffer_size=24M

tmp_table_size=64M

max_heap_table_size=64M

max_allowed_packet=512M

skip_name_resolve=true

memlock=0

sysdate_is_now=1

max_connections=500

thread_cache_size=512

query_cache_type=0

query_cache_size=0

table_open_cache=1024

lower_case_table_names=0

performance_schema=OFF

performance-schema-max-mutex-classes=0

performance-schema-max-mutex-instances=0



[MYSQL]

socket=/var/lib/mysql/mysql.sock



[client]

socket=/var/lib/mysql/mysql.sock



[mysqldump]

socket=/var/lib/mysql/mysql.sock

max_allowed_packet=512M

## Đặt lại thư mục dữ liệu và cài đặt lại các tệp hệ thống cơ sở dữ liệu

$ rm -rf /var/lib/mysql/*

## Tạo thư mục nhật ký

$ mkdir /var/log/mysql

$ chown -R mysql.mysql /var/log/mysql

## Đối với MySQL

$ mysqld --initialize

## Dành cho MariaDB

$ mysql_install_db

  1. Khởi động Máy chủ MySQL / MariaDB

## Đối với MySQL

$ systemctl start mysqld

## Dành cho MariaDB

$ systemctl start mariadb
  1. Tải kết xuất dữ liệu mà chúng tôi đã lấy từ AWS RDS vào nút cơ sở dữ liệu đích tại chỗ

$ mysql --show-warnings < backups/dump.sql
  1. Tạo người dùng sao chép từ nút nguồn AWS RDS

MariaDB [(none)]> CREATE USER 'repl_user'@'149.145.213.%' IDENTIFIED BY 'repl_passw0rd';

Query OK, 0 rows affected (0.242 sec)



MariaDB [(none)]>  GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO repl_user'@'149.145.213.%'  IDENTIFIED BY 'repl_passw0rd' ;

Query OK, 0 rows affected (0.229 sec)
  1. Thiết lập Máy chủ MySQL / MariaDB làm bản sao / nô lệ của nút nguồn AWS RDS

## Trước tiên, hãy tìm kiếm hoặc định vị lệnh CHANGE MASTER

[[email protected] ~]# grep -rn -E -i 'change master to master' backups/dump.sql |head -1

22:-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000584', MASTER_LOG_POS=421;

## Chạy câu lệnh CHANGE MASTER nhưng thêm người dùng / mật khẩu sao chép và tên máy chủ như sau,

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='database-1.xxxxxxx.us-east-2.rds.amazonaws.com', MASTER_LOG_FILE='mysql-bin-changelog.000584', MASTER_LOG_POS=421, MASTER_USER='repl_user', MASTER_PASSWORD='repl_passw0rd';

Query OK, 0 rows affected (0.004 sec)

## Sau đó, bắt đầu chuỗi phụ

MariaDB [(none)]> START SLAVE;

Query OK, 0 rows affected (0.001 sec)

## Kiểm tra trạng thái nô lệ.

MariaDB [(none)]> SHOW SLAVE STATUS \G

*************************** 1. row ***************************

                Slave_IO_State: Waiting for master to send event

                   Master_Host: database-1.xxxxxxx.us-east-2.rds.amazonaws.com

                   Master_User: repl_user

                   Master_Port: 3306

                 Connect_Retry: 60

               Master_Log_File: mysql-bin-changelog.000584

           Read_Master_Log_Pos: 421

                Relay_Log_File: relay-bin.000001

                 Relay_Log_Pos: 4

         Relay_Master_Log_File: mysql-bin-changelog.000584

              Slave_IO_Running: Yes

             Slave_SQL_Running: Yes

               Replicate_Do_DB:

           Replicate_Ignore_DB:

            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: 421

               Relay_Log_Space: 256

               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: 1675507089

                Master_SSL_Crl:

            Master_SSL_Crlpath:

                    Using_Gtid: No

                   Gtid_IO_Pos:

       Replicate_Do_Domain_Ids:

   Replicate_Ignore_Domain_Ids:

                 Parallel_Mode: optimistic

                     SQL_Delay: 0

           SQL_Remaining_Delay: NULL

       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

              Slave_DDL_Groups: 0

Slave_Non_Transactional_Groups: 0

    Slave_Transactional_Groups: 0

1 row in set (0.000 sec)

Giờ đây, cuối cùng chúng tôi đã có thể sao chép từ RDS làm nguồn hoặc chính của bản sao của chúng tôi được đặt tại chỗ. Nó vẫn chưa được thực hiện. Có một số trường hợp bạn sẽ gặp phải lỗi sao chép, chẳng hạn như,

Last_SQL_Errno: 1146

                Last_SQL_Error: Error 'Table 'mysql.rds_heartbeat2' doesn't exist' on query. Default database: 'mysql'. Query: 'INSERT INTO mysql.rds_heartbeat2(id, value) values (1,1602988485784) ON DUPLICATE KEY UPDATE value = 1602988485784'

Vì tại chỗ không cần sao chép dữ liệu từ cơ sở dữ liệu mysql cho các bảng có tiền tố là 'rds%', nên chúng tôi chỉ bỏ qua các bảng này trong quá trình sao chép. Ngoài ra, bạn có thể không muốn AWS RDS cập nhật và thay đổi bảng mysql.user của mình. Để làm điều này, bạn có thể tùy ý bỏ qua lược đồ hoặc chỉ danh sách các bảng, chẳng hạn như,

STOP SLAVE;

Sau đó,

SET GLOBAL replicate_wild_ignore_table='mysql.rds%';

hoặc

SET GLOBAL replicate_wild_ignore_table='mysql.%';

Sự cố MySQL Với --master-data =2

Sử dụng mysqldump với --master-data =2 yêu cầu có đủ đặc quyền yêu cầu đặc quyền SUPER và RELOAD. Vấn đề là AWS RDS không cung cấp điều này cho người dùng quản trị trong quá trình thiết lập và tạo cơ sở dữ liệu. Để giải quyết vấn đề này, AWS RDS của bạn phải có thiết lập chính và bản sao hoặc thiết lập nô lệ. Khi bạn đã thiết lập nô lệ, hãy lấy nó làm máy chủ nguồn đích khi sử dụng mysqldump. Sau đó, dừng các chuỗi nô lệ khỏi bản sao AWS RDS của bạn như sau,

rds-replica-mysql> CALL mysql.rds_stop_replication;

Sau đó sử dụng mysqldump mà không có tùy chọn --master-data giống như bên dưới,

mysqldump -h database-1.xxxxxxx.us-east-2.rds.amazonaws.com -uadmin -p --single-transaction --databases db1 db2 db3  > backups/dump.sql

Sau đó, chạy TRẠNG THÁI CHẬM HIỂN THỊ \ G từ bản sao AWS RDS của bạn và ghi lại Master_Log_File và Exec_Master_Log_Pos mà bạn sẽ sử dụng khi kết nối với bản sao chính AWS RDS tới máy chủ tại chỗ của bạn. Sử dụng các tọa độ đó khi chạy CHANGE MASTER TO… MASTER_LOG_FILE =Master_Log_File, MASTER_LOG_POS =. Tất nhiên, sau khi sao lưu đã được thực hiện xong, đừng quên khởi động bản sao RDS của bạn để bắt đầu lại các chuỗi bản sao của nó,

rds-replica-mysql> CALL mysql.rds_start_replication;

Sử dụng mydumper

mydumper có thể là tùy chọn thay thế của bạn ở đây, đặc biệt khi tập dữ liệu rất lớn vì nó cung cấp tính song song và tốc độ khi lấy bản sao lưu hoặc sao lưu tập dữ liệu của bạn từ một nút RDS nguồn. Thực hiện theo các bước bên dưới từ cài đặt bộ đệm tôi đến tải nó đến máy chủ tại chỗ đích của bạn.

  1. Cài đặt hệ nhị phân. Các mã nhị phân có thể được đặt tại đây https://github.com/maxbube/mydumper/releases.

 $ yum install https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper-0.9.5-2.el6.x86_64.rpm
  1. Lấy bản sao lưu từ nút nguồn RDS. Ví dụ,

[[email protected] mydumper-2]# /usr/bin/mydumper --outputdir=. --verbose=3 --host=database-1.xxxxxxx.us-east-2.rds.amazonaws.com --port=3306 --kill-long-queries --chunk-filesize=5120 --build-empty-files --events --routines --triggers --compress --less-locking --success-on-1146 --regex='(db1\.|db2\.|db3\.|mydb4\.|testdb5\.)' -u admin --password=admin123

** Message: Connected to a MySQL server



** (mydumper:18904): CRITICAL **: Couldn't acquire global lock, snapshots will not be consistent: Access denied for user 'admin'@'%' (using password: YES)

** Message: Started dump at: 2020-10-18 09:34:08



** Message: Written master status

** Message: Multisource slave detected.

** Message: Thread 5 connected using MySQL connection ID 1109

Tại thời điểm này, mydumper sẽ lấy các tệp sao lưu ở dạng tệp * .gz

  1. Tải nó vào máy chủ tại chỗ đích của bạn

$ myloader --host localhost --directory=$(pwd) --queries-per-transaction=10000 --threads=8 --compress-protocol --verbose=3

** Message: 8 threads created

** Message: Creating database `db1`

** Message: Creating table `db1`.`folders_rel`

** Message: Creating table `db2`.`p`

** Message: Creating table `db2`.`t1`

** Message: Creating table `db3`.`AddressCodeTest`
  1. Thiết lập nút đích dưới dạng nô lệ / bản sao. mydumper sẽ bao gồm một tệp có tên là siêu dữ liệu bao gồm các tọa độ nhật ký nhị phân bao gồm các vị trí GTID, ví dụ:

$ cat metadata

Started dump at: 2020-10-18 10:23:35

SHOW MASTER STATUS:

        Log: mysql-bin-changelog.000680

        Pos: 676

        GTID:0-1675507089-3044

## Sau đó chạy thay đổi tổng thể từ bản sao hoặc nút cơ sở dữ liệu MySQL / MariaDB đích đích của bạn

MariaDB [jbmrcd_date]> CHANGE MASTER TO MASTER_HOST='database-1.cmu8qdlvkepg.us-east-2.rds.amazonaws.com', MASTER_USER='repl_user', MASTER_PASSWORD='repl_passw0rd',  MASTER_LOG_FILE='mysql-bin-changelog.000680', MASTER_LOG_POS

=676;

Query OK, 0 rows affected (0.002 sec)

## Bắt đầu nô lệ

MariaDB [jbmrcd_date]> start slave;

Query OK, 0 rows affected (0.001 sec)

Tại thời điểm này, bạn đã sao chép từ một phiên bản Amazon RDS chạy MySQL / MariaDB. Khi ứng dụng của bạn đã sẵn sàng để chuyển khỏi phiên bản Amazon RDS của bạn, hãy thiết lập điểm cuối đi tới máy chủ tại chỗ của bạn và tất cả các giao dịch còn lại từ phiên bản RDS của bạn sẽ được sao chép sang phiên bản tại chỗ của bạn để không bỏ sót dữ liệu nào đến máy chủ tại chỗ của bạn máy chủ tiền sẵn.

Kiểm tra Sự khác biệt Dữ liệu

Khi bạn đã tải hoặc kết xuất dữ liệu của mình tới máy chủ tại chỗ của mình, hoạt động như một bản sao từ phiên bản AWS RDS, bạn nên kiểm tra kỹ điều này bằng cách chạy các phép tính tổng kiểm tra để xác định xem dữ liệu của bạn ở mức độ nào so với nguồn Amazon RDS. Tôi khuyên bạn nên sử dụng công cụ pt-table-checksum của Percona, nhưng bạn có thể tạo công cụ của riêng mình bằng cách sử dụng các công cụ tổng kiểm tra như md5 hoặc sha256 nhưng điều này cần thời gian để thực hiện. Ngoài ra, việc sử dụng nâng cấp pt cũng có thể hữu ích sau khi quá trình di chuyển dữ liệu của bạn bằng cách sử dụng phương pháp sao chép này được thực hiện xong.

Kết luận

Sử dụng mysqldump hoặc mydumper là các công cụ mã nguồn mở miễn phí, đây là một lợi thế lớn, đặc biệt nếu dữ liệu của bạn rất bí mật và bạn không muốn bên thứ ba truy cập vào nó. Mặc dù có thể đơn giản để thực hiện phương pháp này, nhưng có thể có nhiều công việc tẻ nhạt và lớn có thể liên quan đến việc thử nghiệm và kiểm tra hai lần luôn tuân theo để chứng minh rằng quá trình di chuyển hoàn toàn đạt được mà không có bất kỳ mâu thuẫn dữ liệu nào.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuỗi định dạng ngày MariaDB

  2. MariaDB VERSION () Giải thích

  3. Kiểm tra tự động quá trình nâng cấp cho PXC / MariaDB Galera Cluster

  4. Kết nối HAProxy và Kết nối MySQL - Điều bạn nên biết

  5. Nhân rộng MySQL với ProxySQL trên Máy chủ WHM / cPanel:Phần thứ hai