Thứ Bảy, 23 tháng 8, 2025

Cài đặt và cấu hình máy chủ MySQL

MySQL là máy chủ cơ sở dữ liệu SQL nhanh, đa luồng, đa người dùng và mạnh mẽ. Nó được thiết kế cho các hệ thống sản xuất quan trọng, tải nặng và phần mềm được triển khai hàng loạt.

Nội dung

Cài đặt MySQL 

Để cài đặt MySQL, hãy chạy lệnh sau từ dấu nhắc lệnh đầu cuối:

sudo apt install mysql-server

Sau khi cài đặt hoàn tất, máy chủ MySQL sẽ tự động khởi động. Bạn có thể nhanh chóng kiểm tra trạng thái hiện tại của nó thông qua systemd:

sudo service mysql status

Sẽ cung cấp kết quả đầu ra như sau:

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-10-08 14:37:38 PDT; 2 weeks 5 days ago
 Main PID: 2028 (mysqld)
    Tasks: 28 (limit: 4915)
   CGroup: /system.slice/mysql.service
           └─2028 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
 Oct 08 14:37:36 db.example.org systemd[1]: Starting MySQL Community Server...
Oct 08 14:37:38 db.example.org systemd[1]: Started MySQL Community Server.

Trạng thái mạng của dịch vụ MySQL cũng có thể được kiểm tra bằng cách chạy sslệnh tại dấu nhắc thiết bị đầu cuối:

sudo ss -tap | grep mysql

Khi bạn chạy lệnh này, bạn sẽ thấy nội dung tương tự như sau:

LISTEN    0         151              127.0.0.1:mysql             0.0.0.0:*       users:(("mysqld",pid=149190,fd=29))
LISTEN    0         70                       *:33060                   *:*       users:(("mysqld",pid=149190,fd=32))

Nếu máy chủ không chạy đúng cách, bạn có thể nhập lệnh sau để khởi động nó:

sudo service mysql restart

Điểm khởi đầu tốt để khắc phục sự cố là nhật ký systemd, có thể truy cập từ dấu nhắc lệnh đầu cuối bằng lệnh này:

sudo journalctl -u mysql

Cấu hình MySQL 

Bạn có thể chỉnh sửa các tệp trong /etc/mysql/để cấu hình các thiết lập cơ bản – tệp nhật ký, số cổng, v.v. Ví dụ: để cấu hình MySQL lắng nghe các kết nối từ máy chủ mạng, trong tệp /etc/mysql/mysql.conf.d/mysqld.cnf, hãy thay đổi bind-addresschỉ thị thành địa chỉ IP của máy chủ:

bind-address            = 192.168.0.5

Ghi chú

Thay thế 192.168.0.5bằng địa chỉ thích hợp, có thể xác định thông qua lệnh.ip address show

Sau khi thực hiện thay đổi cấu hình, daemon MySQL sẽ cần được khởi động lại bằng lệnh sau:

sudo systemctl restart mysql.service

Công cụ cơ sở dữ liệu 

Mặc dù cấu hình mặc định của MySQL do các gói Ubuntu cung cấp có chức năng hoàn hảo và hoạt động tốt nhưng vẫn có một số điều bạn cần cân nhắc trước khi tiếp tục.

MySQL được thiết kế để cho phép dữ liệu được lưu trữ theo nhiều cách khác nhau. Các phương pháp này được gọi là cơ sở dữ liệu hoặc công cụ lưu trữ. Có hai công cụ lưu trữ chính mà bạn sẽ quan tâm: InnoDB và MyISAM . Các công cụ lưu trữ này hoàn toàn trong suốt đối với người dùng cuối. MySQL sẽ xử lý mọi thứ theo những cách khác nhau bên dưới bề mặt, nhưng bất kể công cụ lưu trữ nào được sử dụng, bạn sẽ vẫn tương tác với cơ sở dữ liệu theo cùng một cách.

Mỗi loại động cơ đều có ưu điểm và nhược điểm riêng.

Mặc dù có thể (và có thể có lợi) kết hợp và khớp các công cụ cơ sở dữ liệu ở cấp độ bảng, nhưng việc làm như vậy sẽ làm giảm hiệu quả điều chỉnh hiệu suất mà bạn có thể thực hiện vì bạn sẽ phải chia tài nguyên giữa hai công cụ thay vì dành riêng cho một công cụ.

InnoDB 

Kể từ MySQL 5.5, InnoDB là công cụ mặc định và được khuyến khích sử dụng hơn MyISAM, trừ khi bạn có nhu cầu cụ thể về các tính năng riêng biệt của công cụ đó.

InnoDB là một công cụ cơ sở dữ liệu hiện đại hơn, được thiết kế để tuân thủ ACID , đảm bảo các giao dịch cơ sở dữ liệu được xử lý đáng tin cậy. Để đáp ứng tiêu chuẩn ACID, tất cả các giao dịch được ghi nhật ký độc lập với các bảng chính. Điều này cho phép khôi phục dữ liệu đáng tin cậy hơn nhiều vì có thể kiểm tra tính nhất quán của dữ liệu.

Khóa ghi có thể xảy ra ở cấp độ hàng trong một bảng. Điều này có nghĩa là nhiều bản cập nhật có thể xảy ra đồng thời trên một bảng. Việc lưu trữ đệm dữ liệu cũng được xử lý trong bộ nhớ trong công cụ cơ sở dữ liệu, cho phép lưu trữ đệm ở cấp độ hàng hiệu quả hơn so với khối tệp.

MyISAM 

MyISAM là phiên bản cũ hơn trong hai phiên bản. Nó có thể nhanh hơn InnoDB trong một số trường hợp nhất định và ưu tiên khối lượng công việc chỉ đọc. Một số ứng dụng web đã được tinh chỉnh xung quanh MyISAM (mặc dù điều đó không có nghĩa là chúng sẽ chậm hơn khi sử dụng InnoDB).

MyISAM cũng hỗ trợ kiểu chỉ mục FULLTEXT , cho phép tìm kiếm rất nhanh một lượng lớn dữ liệu văn bản. Tuy nhiên, MyISAM chỉ có khả năng khóa toàn bộ bảng để ghi. Điều này có nghĩa là chỉ một tiến trình có thể cập nhật bảng tại một thời điểm. Vì bất kỳ ứng dụng nào sử dụng bảng có khả năng mở rộng, điều này có thể gây trở ngại.

Nó cũng thiếu tính năng ghi nhật ký, khiến việc khôi phục dữ liệu sau sự cố trở nên khó khăn hơn. Liên kết sau đây cung cấp một số điểm cần cân nhắc khi sử dụng MyISAM trên cơ sở dữ liệu production .

Sao lưu 

Cơ sở dữ liệu MySQL nên được sao lưu thường xuyên. Việc sao lưu có thể được thực hiện thông qua một số phương pháp, trong đó chúng tôi sẽ thảo luận ba phương pháp ở đây.

mysqldump được tích hợp sẵn mysql-server. Nó hữu ích cho việc sao lưu các cơ sở dữ liệu nhỏ hơn, cho phép chỉnh sửa bản sao lưu trước khi khôi phục và có thể được sử dụng để xuất sang CSV và XML.

Tiện ích Dump của MySQL Shell cho phép sao lưu lược đồ và bảng cụ thể, cả vào tệp cục bộ và máy chủ bảo mật từ xa. Tiện ích này được khuyến nghị để tạo bản sao lưu một phần và tích hợp với các chương trình Python.

Percona Xtrabackup tạo bản sao lưu đầy đủ với hiệu suất cao hơn nhiều so với các tùy chọn trước đây. Tuy nhiên, nó không có khả năng tùy chỉnh lược đồ và bảng. Đây là lựa chọn được khuyến nghị để sao lưu cơ sở dữ liệu lớn trong môi trường sản xuất.

mysqldump 

mysqldumplà một công cụ tích hợp thực hiện sao lưu logic cho MySQL.

Để đưa dữ liệu của cơ sở dữ liệu công khai trên máy chủ MySQL cục bộ vào một tệp, hãy chạy lệnh sau:

mysqldump [database name] > dump.sql

Đối với cơ sở dữ liệu bị hạn chế, hãy chỉ định người dùng có quyền thích hợp bằng cách sử dụng -u:

mysqldump -u root [database name] > dump.sql

Để khôi phục cơ sở dữ liệu từ tệp sao lưu, hãy chạy mysqllệnh và chuyển tệp qua stdin:

mysql -u root [database name] < dump.sql

Xem tài liệu gốc để biết thêm thông tin.

Tiện ích MySQL Shell Dump 

MySQL Shell, được hỗ trợ trong Ubuntu 24.04 LTS trở lên, chứa một bộ tiện ích để sao lưu, sao lưu và khôi phục dữ liệu MySQL. Nó cung cấp tùy chọn lập trình cho các bản sao lưu logic với các tùy chọn lọc.

Để cài đặt MySQL Shell, hãy chạy lệnh sau:

sudo apt install mysql-shell

Chạy lệnh sau để kết nối với máy chủ MySQL cục bộ trên Ubuntu bằng MySQL Shell ở chế độ Python:

mysqlsh --socket=/var/run/mysqld/mysqld.sock --no-password --python

Khởi tạo bản sao lưu cục bộ của tất cả dữ liệu ở chế độ Python bằng:

util.dump_instance("/tmp/worlddump")

Đổ một tập hợp các bảng cụ thể với dump_tables:

util.dump_tables("database name", ["table 1", "table 2"], "/tmp/tabledump")

Để khôi phục dữ liệu đã bị xóa, hãy sử dụng tiện ích tải dữ liệu bị xóa .

util.load_dump("/tmp/worlddump")

Ghi chú

Để khôi phục dữ liệu từ tệp cục bộ, local_infilecần bật tính năng này trên máy chủ MySQL. Kích hoạt tính năng này bằng cách truy cập máy chủ bằng mysqllệnh và nhập .SET GLOBAL local_infile=1;

Xem tài liệu MySQL Shell dump để biết thêm thông tin.

Percona Xtrabackup 

Percona Xtrabackup cũng được hỗ trợ trong Ubuntu 24.04 LTS trở lên, là một công cụ tạo bản sao lưu vật lý . Nó tương tự như dịch vụ thương mại MySQL Enterprise Backup .

Để cài đặt Xtrabackup, hãy chạy lệnh sau từ dấu nhắc lệnh đầu cuối:

sudo apt install percona-xtrabackup

Tạo một bản sao lưu mới bằng xtrabackuplệnh. Việc này có thể được thực hiện khi máy chủ đang chạy.

xtrabackup --backup --target-dir=/tmp/worlddump

Để khôi phục từ bản sao lưu, dịch vụ sẽ cần phải bị gián đoạn. Điều này có thể được thực hiện bằng cách sau:

sudo systemctl stop mysql
xtrabackup --prepare --target-dir=/tmp/worlddump
sudo rm -rf /var/lib/mysql
sudo xtrabackup --copy-back --target-dir=/tmp/worlddump --datadir=/var/lib/mysql
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mysql

Để biết thêm thông tin, hãy xem tài liệu gốc của Percona .

Cấu hình nâng cao 

Tạo cấu hình được điều chỉnh 

Có một số tham số có thể được điều chỉnh trong các tệp cấu hình của MySQL. Điều này sẽ cho phép bạn cải thiện hiệu suất của máy chủ theo thời gian.

Nhiều tham số có thể được điều chỉnh bằng cơ sở dữ liệu hiện có, tuy nhiên một số tham số có thể ảnh hưởng đến bố cục dữ liệu và do đó cần phải cẩn thận hơn khi áp dụng.

Đầu tiên, nếu bạn đã có dữ liệu hiện có, trước tiên bạn sẽ cần thực hiện mysqldumpvà tải lại:

mysqldump --all-databases --routines -u root -p > ~/fulldump.sql

Sau đó, bạn sẽ được nhắc nhập mật khẩu gốc trước khi tạo bản sao dữ liệu. Bạn nên đảm bảo không có người dùng hoặc quy trình nào khác sử dụng cơ sở dữ liệu trong khi thực hiện việc này. Tùy thuộc vào lượng dữ liệu bạn có trong cơ sở dữ liệu, quá trình này có thể mất một lúc. Bạn sẽ không thấy bất kỳ thông tin nào trên màn hình trong suốt quá trình.

Sau khi quá trình dump hoàn tất, hãy tắt MySQL:

sudo service mysql stop

Bạn cũng nên sao lưu cấu hình gốc:

sudo rsync -avz /etc/mysql /root/mysql-backup

Tiếp theo, thực hiện bất kỳ thay đổi cấu hình nào bạn muốn. Sau đó, xóa và khởi tạo lại không gian cơ sở dữ liệu và đảm bảo quyền sở hữu là chính xác trước khi khởi động lại MySQL:

sudo rm -rf /var/lib/mysql/*
sudo mysqld --initialize
sudo chown -R mysql: /var/lib/mysql
sudo service mysql start

Bước cuối cùng là nhập lại dữ liệu của bạn bằng cách đưa lệnh SQL vào cơ sở dữ liệu.

cat ~/fulldump.sql | mysql

Đối với các lần nhập dữ liệu lớn, tiện ích 'Pipe Viewer' có thể hữu ích để theo dõi tiến trình nhập. Bỏ qua bất kỳ thời gian ETA nào do pv; tạo ra vì chúng dựa trên thời gian trung bình cần thiết để xử lý từng hàng của tệp, nhưng tốc độ chèn có thể thay đổi rất nhiều tùy theo hàng với mysqldumps:

sudo apt install pv
pv ~/fulldump.sql | mysql

Sau khi hoàn tất bước này, bạn có thể bắt đầu rồi!

Ghi chú

Điều này không cần thiết cho mọi my.cnfthay đổi. Hầu hết các biến bạn có thể thay đổi để cải thiện hiệu suất đều có thể điều chỉnh được ngay cả khi máy chủ đang chạy. Như với mọi thứ khác, hãy đảm bảo sao lưu tốt các tệp cấu hình và dữ liệu trước khi thực hiện thay đổi.

Bộ điều chỉnh MySQL 

MySQL Tuner là một tập lệnh Perl kết nối với một phiên bản MySQL đang chạy và đưa ra các đề xuất cấu hình để tối ưu hóa cơ sở dữ liệu cho khối lượng công việc của bạn. Máy chủ chạy càng lâu thì lời khuyên càng hữu ích mysqltuner. Trong môi trường sản xuất, hãy cân nhắc chờ ít nhất 24 giờ trước khi chạy công cụ. Bạn có thể cài đặt mysqltunerbằng lệnh sau:

sudo apt install mysqltuner

Sau khi cài đặt xong, chỉ cần chạy: mysqltuner– và đợi báo cáo cuối cùng.

Phần trên cung cấp thông tin chung về máy chủ cơ sở dữ liệu, và phần dưới cung cấp các đề xuất điều chỉnh để thay đổi trong my.cnf. Hầu hết các đề xuất này có thể được thay đổi trực tiếp trên máy chủ mà không cần khởi động lại; hãy xem qua tài liệu MySQL chính thức để biết các biến liên quan cần thay đổi trong môi trường production.

Ví dụ sau đây là một phần của báo cáo từ cơ sở dữ liệu sản xuất cho thấy những lợi ích tiềm năng từ việc tăng bộ đệm truy vấn:

-------- Recommendations -----------------------------------------------------
General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
    key_buffer_size (> 1.4G)
    query_cache_size (> 32M)
    table_cache (> 64)
    innodb_buffer_pool_size (>= 22G)

Rõ ràng, các chiến lược tối ưu hóa hiệu suất khác nhau tùy theo ứng dụng; chiến lược hiệu quả nhất với WordPress có thể không hiệu quả nhất với Drupal hay Joomla. Hiệu suất có thể phụ thuộc vào loại truy vấn, cách sử dụng chỉ mục, mức độ hiệu quả của thiết kế cơ sở dữ liệu, v.v.

Bạn có thể thấy hữu ích khi dành thời gian tìm kiếm các mẹo tinh chỉnh cơ sở dữ liệu dựa trên ứng dụng bạn đang sử dụng. Khi đã đạt đến điểm lợi nhuận giảm dần từ việc điều chỉnh cấu hình cơ sở dữ liệu, hãy xem xét cải tiến chính ứng dụng hoặc đầu tư vào phần cứng mạnh hơn và/hoặc mở rộng môi trường cơ sở dữ liệu.

Đọc thêm 

=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
cở sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master