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

Cách quản lý MySQL - dành cho Oracle DBAs

Cơ sở dữ liệu nguồn mở đang nhanh chóng trở thành xu hướng chủ đạo, vì vậy việc di chuyển từ các công cụ độc quyền sang các công cụ nguồn mở đang là một xu hướng của ngành hiện nay. Điều đó cũng có nghĩa là DBA của chúng tôi thường có nhiều phụ trợ cơ sở dữ liệu để quản lý.

Trong một vài bài đăng trên blog trước đây, tôi và đồng nghiệp Paul Namuag đã đề cập đến một số khía cạnh của việc di chuyển từ Oracle sang Percona, MariaDB và MySQL. Mục tiêu rõ ràng của việc di chuyển là để ứng dụng của bạn bắt đầu và chạy hiệu quả hơn trong môi trường cơ sở dữ liệu mới, tuy nhiên, điều quan trọng là phải đảm bảo rằng nhân viên sẵn sàng hỗ trợ nó.

Blog này đề cập đến các hoạt động cơ bản của MySQL với tham chiếu đến các tác vụ tương tự mà bạn sẽ thực hiện hàng ngày trong môi trường Oracle của mình. Nó cung cấp cho bạn kiến ​​thức chuyên sâu về các chủ đề khác nhau để giúp bạn tiết kiệm thời gian vì bạn có thể liên hệ với kiến ​​thức Oracle mà bạn đã xây dựng trong nhiều năm.

Chúng tôi cũng sẽ nói về các công cụ dòng lệnh bên ngoài bị thiếu trong cài đặt MySQL mặc định nhưng cần thiết để thực hiện các hoạt động hàng ngày một cách hiệu quả. Ví dụ:phiên bản nguồn mở không đi kèm với Oracle Cloud Control tương đương, vì vậy hãy kiểm tra ClusterControl nếu bạn đang tìm kiếm thứ gì đó tương tự.

Trong blog này, chúng tôi giả định rằng bạn có kiến ​​thức về Oracle tốt hơn MySQL và do đó muốn biết mối tương quan giữa hai điều này. Các ví dụ dựa trên nền tảng Linux tuy nhiên bạn có thể tìm thấy nhiều điểm tương đồng trong việc quản lý MySQL trên Windows.

Làm cách nào để kết nối với MySQL?

Hãy bắt đầu cuộc hành trình của chúng ta với một nhiệm vụ (dường như) rất cơ bản. Trên thực tế, đây là một loại tác vụ có thể gây ra một số nhầm lẫn do các khái niệm đăng nhập khác nhau trong Oracle và MySQL.

Tương đương với kết nối sqlplus / as sysdba là lệnh đầu cuối “mysql” với cờ -uroot. Trong thế giới MySQL, superuser được gọi là root. Người dùng cơ sở dữ liệu MySQL (bao gồm cả gốc) được xác định theo tên và máy chủ lưu trữ mà từ đó nó có thể kết nối.

Thông tin về người dùng và máy chủ từ nơi nó có thể kết nối được lưu trữ trong bảng mysql.user. Với nỗ lực kết nối, MySQL sẽ kiểm tra xem máy khách, tên người dùng và mật khẩu có khớp với hàng trong bảng siêu dữ liệu hay không.

Đây là một cách tiếp cận hơi khác so với trong Oracle, nơi chúng tôi chỉ có tên người dùng và mật khẩu, nhưng những người đã quen thuộc với Trình quản lý kết nối Oracle có thể tìm thấy một số điểm tương đồng.

Bạn sẽ không tìm thấy các mục TNS được xác định trước như trong Oracle. Thông thường, đối với kết nối quản trị, chúng ta cần người dùng, mật khẩu và cờ máy chủ -h. Cổng mặc định là 3306 (giống như 1521 trong Oracle) nhưng điều này có thể khác nhau đối với các thiết lập khác nhau.

Theo mặc định, nhiều bản cài đặt sẽ bị chặn kết nối truy cập root từ bất kỳ máy nào ([email protected]’% ’), vì vậy bạn phải đăng nhập vào máy chủ lưu trữ MySQL, thường là qua ssh.

Nhập nội dung sau:

mysql -u root

Khi mật khẩu gốc không được đặt, điều này là đủ. Nếu mật khẩu là bắt buộc thì bạn nên thêm cờ -p.

mysql -u root -p

Bây giờ bạn đã đăng nhập vào ứng dụng khách mysql (tương đương với sqlplus) và sẽ thấy một lời nhắc, thường là 'mysql>'.

MySQL có hoạt động không?

Bạn có thể sử dụng tập lệnh khởi động dịch vụ mysql hoặc lệnh mysqladmin để tìm hiểu xem nó có đang chạy hay không. Sau đó, bạn có thể sử dụng lệnh ps để xem các quy trình mysql có đang hoạt động hay không. Một giải pháp thay thế khác có thể là mysqladmin, đây là một tiện ích được sử dụng để thực hiện các hoạt động quản trị.

mysqladmin -u root -p status

Trên Debian:

/etc/init.d/mysql status

Nếu bạn đang sử dụng RedHat hoặc Fedora thì bạn có thể sử dụng tập lệnh sau:

service mysqld status

Hoặc

/etc/init.d/mysqld status

Hoặc

systemctl status mysql.service

Trên các phiên bản MariaDB, bạn nên tìm tên dịch vụ MariaDB.

systemctl status mariadb

Có gì trong Cơ sở dữ liệu này?

Giống như trong Oracle, bạn có thể truy vấn các đối tượng siêu dữ liệu để lấy thông tin về các đối tượng cơ sở dữ liệu.

Ở đây thường sử dụng một số phím tắt, các lệnh giúp bạn liệt kê các đối tượng hoặc lấy DDL của các đối tượng.

show databases;
use database_name;
show tables;
show table status;
show index from table_name;
show create table table_name;

Tương tự như Oracle, bạn có thể mô tả bảng:

desc table_name;

Dữ liệu của tôi được lưu trữ ở đâu?

Không có bộ nhớ trong chuyên dụng như ASM trong MySQL. Tất cả các tệp dữ liệu được đặt trong các điểm gắn kết hệ điều hành thông thường. Với cài đặt mặc định, bạn có thể tìm thấy dữ liệu của mình trong:

/var/lib/mysql

Vị trí dựa trên datadir biến.

[email protected]:~# cat /etc/mysql/my.cnf | grep datadir
datadir=/var/lib/mysql

Bạn sẽ thấy có một thư mục cho mỗi cơ sở dữ liệu.

Tùy thuộc vào phiên bản và công cụ lưu trữ (vâng, có một số ở đây), thư mục của cơ sở dữ liệu có thể chứa các tệp có định dạng * .frm, định dạng này xác định cấu trúc của mỗi bảng trong cơ sở dữ liệu. Đối với bảng MyISAM, dữ liệu (* .MYD) và chỉ mục (* .MYI) cũng được lưu trữ trong thư mục này.

Bảng InnoDB được lưu trữ trong không gian bảng InnoDB. Mỗi tệp trong số đó bao gồm một hoặc nhiều tệp, tương tự như không gian bảng Oracle. Trong cài đặt mặc định, tất cả dữ liệu InnoDB và chỉ mục cho tất cả cơ sở dữ liệu trên máy chủ MySQL được lưu giữ trong một vùng bảng, bao gồm một tệp:/ var / lib / mysql / ibdata1. Trong hầu hết các thiết lập, bạn không quản lý không gian bảng như trong Oracle. Cách tốt nhất là giữ chúng ở chế độ tự động bật và kích thước tối đa không giới hạn.

[email protected]:~# cat /etc/mysql/my.cnf | grep innodb-data-file-path
innodb-data-file-path = ibdata1:100M:autoextend

InnoDB có các tệp nhật ký, tương đương với nhật ký làm lại của Oracle, cho phép khôi phục sự cố tự động. Theo mặc định, có hai tệp nhật ký:/ var / lib / mysql / ib_logfile0 và / var / lib / mysql / ib_logfile1. Dữ liệu hoàn tác được giữ trong tệp vùng bảng.

[email protected]:/var/lib/mysql# ls -rtla | grep logfile
-rw-rw----  1 mysql mysql  268435456 Dec 15 00:59 ib_logfile1
-rw-rw----  1 mysql mysql  268435456 Mar  6 11:45 ib_logfile0

Thông tin siêu dữ liệu ở đâu?

Không có loại chế độ xem dba_ *, user_ *, all_ * nhưng MySQL có chế độ xem siêu dữ liệu nội bộ.

Information_schema được định nghĩa trong tiêu chuẩn SQL 2003 và được triển khai bởi các cơ sở dữ liệu chính khác, ví dụ:Máy chủ SQL, PostgreSQL.

Kể từ MySQL 5.0, cơ sở dữ liệu information_schema đã có sẵn, chứa thông tin từ điển dữ liệu. Thông tin thực sự đã được lưu trữ trong các tệp FRM bên ngoài. Cuối cùng, sau nhiều năm, các tệp .frm đã biến mất trong phiên bản 8.0. Siêu dữ liệu vẫn hiển thị trong cơ sở dữ liệu information_schema nhưng sử dụng công cụ lưu trữ InnoDB.

Để xem tất cả các chế độ xem thực tế có trong từ điển dữ liệu trong máy khách mysql, hãy chuyển sang cơ sở dữ liệu information_schema:

use information_schema;
show tables;

Bạn có thể tìm thêm thông tin trong cơ sở dữ liệu MySQL, chứa thông tin về db, sự kiện (MySQL job), plugin, bản sao, cơ sở dữ liệu, người dùng, v.v.

Số lượt xem phụ thuộc vào phiên bản và nhà cung cấp.

Chọn * từ v $ phiên

Oracle’s select * from v $ session được trình bày ở đây bằng lệnh SHOW PROCESSLIST hiển thị danh sách các chuỗi.

mysql> SHOW PROCESSLIST;
+---------+------------------+------------------+--------------------+---------+--------+--------------------+------------------+-----------+---------------+
| Id      | User             | Host             | db                 | Command | Time   | State              | Info             | Rows_sent | Rows_examined |
+---------+------------------+------------------+--------------------+---------+--------+--------------------+------------------+-----------+---------------+
|       1 | system user      |                  | NULL               | Sleep   | 469264 | wsrep aborter idle | NULL             |         0 |             0 |
|       2 | system user      |                  | NULL               | Sleep   | 469264 | NULL               | NULL             |         0 |             0 |
|       3 | system user      |                  | NULL               | Sleep   | 469257 | NULL               | NULL             |         0 |             0 |
|       4 | system user      |                  | NULL               | Sleep   | 469257 | NULL               | NULL             |         0 |             0 |
|       6 | system user      |                  | NULL               | Sleep   | 469257 | NULL               | NULL             |         0 |             0 |
|      16 | maxscale         | 10.0.3.168:5914  | NULL               | Sleep   |      5 |                    | NULL             |         4 |             4 |
|      59 | proxysql-monitor | 10.0.3.168:6650  | NULL               | Sleep   |      7 |                    | NULL             |         0 |             0 |
|      81 | proxysql-monitor | 10.0.3.78:62896  | NULL               | Sleep   |      6 |                    | NULL             |         0 |             0 |
|    1564 | proxysql-monitor | 10.0.3.78:25064  | NULL               | Sleep   |      3 |                    | NULL             |         0 |             0 |
| 1822418 | cmon             | 10.0.3.168:41202 | information_schema | Sleep   |      0 |                    | NULL             |         0 |             8 |
| 1822631 | cmon             | 10.0.3.168:43254 | information_schema | Sleep   |      4 |                    | NULL             |         1 |             1 |
| 1822646 | cmon             | 10.0.3.168:43408 | information_schema | Sleep   |      0 |                    | NULL             |       464 |           464 |
| 2773260 | backupuser       | localhost        | mysql              | Query   |      0 | init               | SHOW PROCESSLIST |         0 |             0 |
+---------+------------------+------------------+--------------------+---------+--------+--------------------+------------------+-----------+---------------+


13 rows in set (0.00 sec)

Nó dựa trên thông tin được lưu trữ trong dạng xem information_schema.processlist. Chế độ xem yêu cầu phải có đặc quyền QUY TRÌNH. Nó cũng có thể giúp bạn kiểm tra xem bạn có đang sử dụng hết số lượng quy trình tối đa hay không.

Nhật ký cảnh báo ở đâu?

Nhật ký lỗi có thể được tìm thấy trong my.cnf hoặc thông qua lệnh hiển thị biến.

mysql> show variables like 'log_error';
+---------------+--------------------------+
| Variable_name | Value                    |
+---------------+--------------------------+
| log_error     | /var/lib/mysql/error.log |
+---------------+--------------------------+
1 row in set (0.00 sec)

Danh sách người dùng và quyền của họ ở đâu?

Thông tin về người dùng được lưu trữ trong bảng mysql.user, trong khi các khoản tài trợ được lưu trữ ở một số nơi bao gồm mysql.user, mysql.tables_priv,

Quyền truy cập của người dùng MySQL được định nghĩa trong:

mysql.columns_priv, mysql.tables_priv, mysql.db,mysql.user

Cách tốt nhất để liệt kê các khoản tài trợ là sử dụng pt-grants, công cụ từ bộ công cụ Percona (phải có cho mọi MySQL DBA).

pt-show-grants --host localhost --user root --ask-pass

Ngoài ra, bạn có thể sử dụng truy vấn sau (do Calvaldo tạo)

SELECT
    CONCAT("`",gcl.Db,"`") AS 'Database(s) Affected',
    CONCAT("`",gcl.Table_name,"`") AS 'Table(s) Affected',
    gcl.User AS 'User-Account(s) Affected',
    IF(gcl.Host='%','ALL',gcl.Host) AS 'Remote-IP(s) Affected',
    CONCAT("GRANT ",UPPER(gcl.Column_priv)," (",GROUP_CONCAT(gcl.Column_name),") ",
                 "ON `",gcl.Db,"`.`",gcl.Table_name,"` ",
                 "TO '",gcl.User,"'@'",gcl.Host,"';") AS 'GRANT Statement (Reconstructed)'
FROM mysql.columns_priv gcl
GROUP BY CONCAT(gcl.Db,gcl.Table_name,gcl.User,gcl.Host)
/* SELECT * FROM mysql.columns_priv */

UNION

/* [Database.Table]-Specific Grants */
SELECT
    CONCAT("`",gtb.Db,"`") AS 'Database(s) Affected',
    CONCAT("`",gtb.Table_name,"`") AS 'Table(s) Affected',
    gtb.User AS 'User-Account(s) Affected',
    IF(gtb.Host='%','ALL',gtb.Host) AS 'Remote-IP(s) Affected',
    CONCAT(
        "GRANT ",UPPER(gtb.Table_priv)," ",
        "ON `",gtb.Db,"`.`",gtb.Table_name,"` ",
        "TO '",gtb.User,"'@'",gtb.Host,"';"
    ) AS 'GRANT Statement (Reconstructed)'
FROM mysql.tables_priv gtb
WHERE gtb.Table_priv!=''
/* SELECT * FROM mysql.tables_priv */

UNION

/* Database-Specific Grants */
SELECT
    CONCAT("`",gdb.Db,"`") AS 'Database(s) Affected',
    "ALL" AS 'Table(s) Affected',
    gdb.User AS 'User-Account(s) Affected',
    IF(gdb.Host='%','ALL',gdb.Host) AS 'Remote-IP(s) Affected',
    CONCAT(
        'GRANT ',
        CONCAT_WS(',',
            IF(gdb.Select_priv='Y','SELECT',NULL),
            IF(gdb.Insert_priv='Y','INSERT',NULL),
            IF(gdb.Update_priv='Y','UPDATE',NULL),
            IF(gdb.Delete_priv='Y','DELETE',NULL),
            IF(gdb.Create_priv='Y','CREATE',NULL),
            IF(gdb.Drop_priv='Y','DROP',NULL),
            IF(gdb.Grant_priv='Y','GRANT',NULL),
            IF(gdb.References_priv='Y','REFERENCES',NULL),
            IF(gdb.Index_priv='Y','INDEX',NULL),
            IF(gdb.Alter_priv='Y','ALTER',NULL),
            IF(gdb.Create_tmp_table_priv='Y','CREATE TEMPORARY TABLES',NULL),
            IF(gdb.Lock_tables_priv='Y','LOCK TABLES',NULL),
            IF(gdb.Create_view_priv='Y','CREATE VIEW',NULL),
            IF(gdb.Show_view_priv='Y','SHOW VIEW',NULL),
            IF(gdb.Create_routine_priv='Y','CREATE ROUTINE',NULL),
            IF(gdb.Alter_routine_priv='Y','ALTER ROUTINE',NULL),
            IF(gdb.Execute_priv='Y','EXECUTE',NULL),
            IF(gdb.Event_priv='Y','EVENT',NULL),
            IF(gdb.Trigger_priv='Y','TRIGGER',NULL)
        ),
        " ON `",gdb.Db,"`.* TO '",gdb.User,"'@'",gdb.Host,"';"
    ) AS 'GRANT Statement (Reconstructed)'
FROM mysql.db gdb
WHERE gdb.Db != ''
/* SELECT * FROM mysql.db */

UNION

/* User-Specific Grants */
SELECT
    "ALL" AS 'Database(s) Affected',
    "ALL" AS 'Table(s) Affected',
    gus.User AS 'User-Account(s) Affected',
    IF(gus.Host='%','ALL',gus.Host) AS 'Remote-IP(s) Affected',
    CONCAT(
        "GRANT ",
        IF((gus.Select_priv='N')&(gus.Insert_priv='N')&(gus.Update_priv='N')&(gus.Delete_priv='N')&(gus.Create_priv='N')&(gus.Drop_priv='N')&(gus.Reload_priv='N')&(gus.Shutdown_priv='N')&(gus.Process_priv='N')&(gus.File_priv='N')&(gus.References_priv='N')&(gus.Index_priv='N')&(gus.Alter_priv='N')&(gus.Show_db_priv='N')&(gus.Super_priv='N')&(gus.Create_tmp_table_priv='N')&(gus.Lock_tables_priv='N')&(gus.Execute_priv='N')&(gus.Repl_slave_priv='N')&(gus.Repl_client_priv='N')&(gus.Create_view_priv='N')&(gus.Show_view_priv='N')&(gus.Create_routine_priv='N')&(gus.Alter_routine_priv='N')&(gus.Create_user_priv='N')&(gus.Event_priv='N')&(gus.Trigger_priv='N')&(gus.Create_tablespace_priv='N')&(gus.Grant_priv='N'),
            "USAGE",
            IF((gus.Select_priv='Y')&(gus.Insert_priv='Y')&(gus.Update_priv='Y')&(gus.Delete_priv='Y')&(gus.Create_priv='Y')&(gus.Drop_priv='Y')&(gus.Reload_priv='Y')&(gus.Shutdown_priv='Y')&(gus.Process_priv='Y')&(gus.File_priv='Y')&(gus.References_priv='Y')&(gus.Index_priv='Y')&(gus.Alter_priv='Y')&(gus.Show_db_priv='Y')&(gus.Super_priv='Y')&(gus.Create_tmp_table_priv='Y')&(gus.Lock_tables_priv='Y')&(gus.Execute_priv='Y')&(gus.Repl_slave_priv='Y')&(gus.Repl_client_priv='Y')&(gus.Create_view_priv='Y')&(gus.Show_view_priv='Y')&(gus.Create_routine_priv='Y')&(gus.Alter_routine_priv='Y')&(gus.Create_user_priv='Y')&(gus.Event_priv='Y')&(gus.Trigger_priv='Y')&(gus.Create_tablespace_priv='Y')&(gus.Grant_priv='Y'),
                "ALL PRIVILEGES",
                CONCAT_WS(',',
                    IF(gus.Select_priv='Y','SELECT',NULL),
                    IF(gus.Insert_priv='Y','INSERT',NULL),
                    IF(gus.Update_priv='Y','UPDATE',NULL),
                    IF(gus.Delete_priv='Y','DELETE',NULL),
                    IF(gus.Create_priv='Y','CREATE',NULL),
                    IF(gus.Drop_priv='Y','DROP',NULL),
                    IF(gus.Reload_priv='Y','RELOAD',NULL),
                    IF(gus.Shutdown_priv='Y','SHUTDOWN',NULL),
                    IF(gus.Process_priv='Y','PROCESS',NULL),
                    IF(gus.File_priv='Y','FILE',NULL),
                    IF(gus.References_priv='Y','REFERENCES',NULL),
                    IF(gus.Index_priv='Y','INDEX',NULL),
                    IF(gus.Alter_priv='Y','ALTER',NULL),
                    IF(gus.Show_db_priv='Y','SHOW DATABASES',NULL),
                    IF(gus.Super_priv='Y','SUPER',NULL),
                    IF(gus.Create_tmp_table_priv='Y','CREATE TEMPORARY TABLES',NULL),
                    IF(gus.Lock_tables_priv='Y','LOCK TABLES',NULL),
                    IF(gus.Execute_priv='Y','EXECUTE',NULL),
                    IF(gus.Repl_slave_priv='Y','REPLICATION SLAVE',NULL),
                    IF(gus.Repl_client_priv='Y','REPLICATION CLIENT',NULL),
                    IF(gus.Create_view_priv='Y','CREATE VIEW',NULL),
                    IF(gus.Show_view_priv='Y','SHOW VIEW',NULL),
                    IF(gus.Create_routine_priv='Y','CREATE ROUTINE',NULL),
                    IF(gus.Alter_routine_priv='Y','ALTER ROUTINE',NULL),
                    IF(gus.Create_user_priv='Y','CREATE USER',NULL),
                    IF(gus.Event_priv='Y','EVENT',NULL),
                    IF(gus.Trigger_priv='Y','TRIGGER',NULL),
                    IF(gus.Create_tablespace_priv='Y','CREATE TABLESPACE',NULL)
                )
            )
        ),
        " ON *.* TO '",gus.User,"'@'",gus.Host,"' REQUIRE ",
        CASE gus.ssl_type
            WHEN 'ANY' THEN
                "SSL "
            WHEN 'X509' THEN
                "X509 "
            WHEN 'SPECIFIED' THEN
                CONCAT_WS("AND ",
                    IF((LENGTH(gus.ssl_cipher)>0),CONCAT("CIPHER '",CONVERT(gus.ssl_cipher USING utf8),"' "),NULL),
                    IF((LENGTH(gus.x509_issuer)>0),CONCAT("ISSUER '",CONVERT(gus.ssl_cipher USING utf8),"' "),NULL),
                    IF((LENGTH(gus.x509_subject)>0),CONCAT("SUBJECT '",CONVERT(gus.ssl_cipher USING utf8),"' "),NULL)
                )
            ELSE "NONE "
        END,
        "WITH ",
        IF(gus.Grant_priv='Y',"GRANT OPTION ",""),
        "MAX_QUERIES_PER_HOUR ",gus.max_questions," ",
        "MAX_CONNECTIONS_PER_HOUR ",gus.max_connections," ",
        "MAX_UPDATES_PER_HOUR ",gus.max_updates," ",
        "MAX_USER_CONNECTIONS ",gus.max_user_connections,
        ";"
    ) AS 'GRANT Statement (Reconstructed)'
FROM mysql.user gus;

Cách tạo người dùng mysql

Quy trình ‘tạo người dùng’ tương tự như Oracle. Ví dụ đơn giản nhất có thể là:

CREATE user 'username'@'hostname' identified by 'password';
GRANT privilege_name on *.* TO 'username'@'hostname';

Tùy chọn cấp và tạo trong một dòng với:

GRANT privilege_name  ON *.* TO 'username'@'hostname' identified by 'password';

đã bị loại bỏ trong MySQL 8.0.

Làm cách nào để khởi động và dừng MySQL?

Bạn có thể dừng và khởi động MySQL với dịch vụ.

Lệnh thực sự phụ thuộc vào bản phân phối Linux và tên dịch vụ.

Dưới đây, bạn có thể tìm thấy một ví dụ với tên dịch vụ mysqld.

Ubuntu

/etc/init.d/mysqld start 
/etc/init.d/mysqld stop 
/etc/init.d/mysqld restart

RedHat / Centos

service mysqld start 
service mysqld stop 
service mysqld restart
systemctl start mysqld.service
systemctl stop mysqld.service
systemctl restart mysqld.service

Dữ liệu cấu hình máy chủ MySQL ở đâu?

Cấu hình được lưu trữ trong tệp my.cnf.

Cho đến phiên bản 8.0, bất kỳ thay đổi cài đặt động nào sẽ vẫn còn sau khi khởi động lại đều yêu cầu cập nhật thủ công tệp my.cnf. Tương tự như Oracle’s scope =both, bạn có thể thay đổi các giá trị bằng cách sử dụng tùy chọn cố định.

mysql> SET PERSIST max_connections = 1000;
mysql> SET @@PERSIST.max_connections = 1000;

Đối với các phiên bản cũ hơn, hãy sử dụng:

mysql> SET GLOBAL max_connections = 1000;
$ vi /etc/mysql/my.cnf
SET GLOBAL max_connections = 1000;

Làm cách nào để sao lưu MySQL?

Có hai cách để thực hiện sao lưu mysql.

Đối với cơ sở dữ liệu nhỏ hơn hoặc các bản sao lưu có chọn lọc nhỏ hơn, bạn có thể sử dụng lệnh mysqldump.

Sao lưu cơ sở dữ liệu với mysqldump (sao lưu lôgic):

mysqldump -uuser -p --databases db_name --routines --events --single-transaction | gzip > db_name_backup.sql.gz

xtrabackup, mariabackup (sao lưu nhị phân nóng)

Phương pháp thích hợp là sử dụng xtrabackup hoặc mariabackup, các công cụ bên ngoài để chạy các bản sao lưu nhị phân nóng.

Oracle cung cấp sao lưu nhị phân nóng trong phiên bản trả phí có tên MySQL Enterprise Edition.

mariabackup --user=root --password=PASSWORD --backup --target-dir=/u01/backups/

Sao lưu luồng sang máy chủ khác

Khởi động trình nghe trên máy chủ bên ngoài trên cổng thích hợp (trong ví dụ này là 1984)

nc -l 1984 | pigz -cd - | pv | xbstream -x -C /u01/backups

Chạy sao lưu và chuyển sang máy chủ bên ngoài

innobackupex --user=root --password=PASSWORD --stream=xbstream /var/tmp | pigz  | pv | nc external_host.com 1984

Sao chép quyền của người dùng

Thường cần phải sao chép quyền của người dùng và chuyển chúng sang các máy chủ khác.

Cách được khuyến nghị để làm điều này là sử dụng pt-show-grants.

pt-show-grants > /u01/backups

Làm cách nào để khôi phục MySQL?

Khôi phục sao lưu lôgic

MySQLdump tạo tệp SQL, tệp này có thể được thực thi bằng lệnh nguồn.

Để giữ tệp nhật ký của quá trình thực hiện, hãy sử dụng lệnh tee.

mysql> tee dump.log
mysql> source mysqldump.sql

Khôi phục sao lưu nhị phân (xtrabackup / mariabackup)

Để khôi phục MySQL từ bản sao lưu nhị phân, trước tiên bạn cần khôi phục các tệp và sau đó áp dụng các tệp nhật ký.

Bạn có thể so sánh quy trình này để khôi phục và khôi phục trong Oracle.

xtrabackup --copy-back --target-dir=/var/lib/data
innobackupex --apply-log --use-memory=[values in MB or GB] /var/lib/data

Hy vọng rằng những mẹo này cung cấp một cái nhìn tổng quan tốt về cách thực hiện các tác vụ quản trị cơ bản.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AVG () - Tính giá trị trung bình của một cột trong MySQL

  2. Nhận tổng của cột MySQL trong PHP

  3. Truyền từ VARCHAR sang INT - MySQL

  4. Truy vấn tham số MySQL

  5. Tạo biến bảng trong MySQL