mysql – skill DevOps & Hạ tầng cho agent AI
Quản trị cơ sở dữ liệu MySQL/MariaDB. Cấu hình replication và tối ưu hiệu năng. Dùng khi quản lý triển khai MySQL.
Cài skill mysql bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/mysql-bbba1.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /mysql – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/mysql-bbba1.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $mysql – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/mysql-bbba1.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /mysql – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/mysql-bbba1.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /mysql – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
MySQL / MariaDB
Administer, optimize, and secure MySQL and MariaDB databases in development and production environments.
When to Use
- You need a mature, widely supported relational database.
- Your stack depends on MySQL-specific features or compatibility (WordPress, Magento, many PHP frameworks).
- You are setting up source-replica replication for read scaling.
- You want to tune InnoDB for high-throughput transactional workloads.
Prerequisites
- Linux server (Debian/Ubuntu or RHEL-based) or Docker.
- Root or sudo access for package installation.
- Familiarity with SQL fundamentals.
Version and recovery boundaries
MySQL and MariaDB are not interchangeable: select exact server/tool versions and supported replication syntax before adapting these examples. Tuning values are workload examples; some InnoDB options are removed or replaced in newer versions. Real credentials belong in protected option files/secret providers, not command arguments, Compose source or history. Replace sample credentials and bind only the required private interfaces. XtraBackup must match the server version; --move-back consumes the backup files, so preserve an independent copy. --single-transaction consistency depends on transactional tables and no concurrent DDL. Do not skip replication errors or kill blocking transactions without diagnosing consistency/rollback consequences. REPAIR TABLE does not repair InnoDB. A zero lag counter alone does not prove a healthy consistent replica; validate initialization from a matching snapshot/log position and use encrypted replication. Backup pipelines must propagate failures (pipefail) and be restore-tested.
Installation and Setup
# Debian / Ubuntu — MySQL 8
sudo apt update
sudo apt install -y mysql-server
# RHEL / Amazon Linux
sudo dnf install -y mysql-server
sudo systemctl enable --now mysqld
# Run the secure installation wizard
sudo mysql_secure_installation
# Prompts: set root password, remove anonymous users, disable remote root, remove test db
# Verify
mysql --version
sudo systemctl status mysqlInitial User and Database Setup
sudo mysql -u root -p-- Create a database
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Create an application user with strong auth
CREATE USER 'myapp'@'%' IDENTIFIED BY 'strong_password_here';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'myapp'@'%';
FLUSH PRIVILEGES;
-- Verify
SHOW GRANTS FOR 'myapp'@'%';mysql CLI Reference
# Connect
mysql -u myapp -p -h 127.0.0.1 mydb
# Execute a single statement
mysql -u myapp -p -e "SELECT COUNT(*) FROM orders;" mydb
# Import a SQL file
mysql -u myapp -p mydb < schema.sql
# Export query results to CSV
mysql -u myapp -p -e "SELECT * FROM users" mydb \
> users.tsv # tabular output, not escaped CSV-- Inside the mysql shell
SHOW DATABASES;
USE mydb;
SHOW TABLES;
DESCRIBE users;
SHOW CREATE TABLE users\G
SHOW PROCESSLIST;
SHOW ENGINE INNODB STATUS\GConfiguration Tuning
Edit /etc/mysql/mysql.conf.d/mysqld.cnf (or /etc/my.cnf on RHEL).
[mysqld]
# -- Networking --
bind-address = 127.0.0.1
max_connections = 300
wait_timeout = 600
interactive_timeout = 600
# -- InnoDB (most impactful settings) --
innodb_buffer_pool_size = 4G # ~70% of RAM on a dedicated server
innodb_buffer_pool_instances = 4 # 1 per GB of pool (up to 64)
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 1 # 1 = ACID; 2 = faster, slight risk
innodb_flush_method = O_DIRECT # avoids double buffering on Linux
innodb_io_capacity = 2000 # raise for SSD
innodb_io_capacity_max = 4000
# -- Query cache (disabled in MySQL 8, use ProxySQL or app cache) --
# query_cache_type = 0
# -- Logging --
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_error = /var/log/mysql/error.log
# -- Binary log (required for replication) --
server-id = 1
log_bin = /var/log/mysql/mysql-bin
binlog_expire_logs_seconds = 604800 # 7 days
sync_binlog = 1
# -- Character set --
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci# Apply changes
sudo systemctl restart mysql
# Verify a setting at runtime
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"Backup and Restore
Logical Backups with mysqldump
# Single database
mysqldump -u root -p --single-transaction --routines --triggers \
mydb > /backups/mydb_$(date +%F).sql
# All databases
mysqldump -u root -p --all-databases --single-transaction \
> /backups/all_$(date +%F).sql
# Compressed backup
mysqldump -u root -p --single-transaction mydb \
| gzip > /backups/mydb_$(date +%F).sql.gz
# Restore
mysql -u root -p mydb < /backups/mydb_2025-01-15.sql
# Restore compressed
gunzip < /backups/mydb_2025-01-15.sql.gz | mysql -u root -p mydbPhysical Backups with Percona XtraBackup
# Install
sudo apt install -y percona-xtrabackup-80
# Full backup
xtrabackup --backup --user=root --password=secret \
--target-dir=/backups/full_$(date +%F)
# Prepare the backup (apply redo logs)
xtrabackup --prepare --target-dir=/backups/full_2025-01-15
# Restore (stop MySQL first)
sudo systemctl stop mysql
ls /var/lib/mysql/* # verify this is the correct data dir first
# Preserve the stopped data directory in a separately verified recovery location.
# Do not delete it; prepare an empty destination only after a tested restore plan.
xtrabackup --move-back --target-dir=/backups/full_2025-01-15
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mysqlIncremental Backup with XtraBackup
# Incremental based on the full backup
xtrabackup --backup --user=root --password=secret \
--target-dir=/backups/inc_$(date +%F) \
--incremental-basedir=/backups/full_2025-01-15
# Prepare: apply full, then incremental
xtrabackup --prepare --apply-log-only --target-dir=/backups/full_2025-01-15
xtrabackup --prepare --target-dir=/backups/full_2025-01-15 \
--incremental-dir=/backups/inc_2025-01-16Source-Replica Replication
Source (Primary)
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin
binlog_format = ROW-- Create replication user
CREATE USER 'replicator'@'10.0.0.%' IDENTIFIED BY 'repl_secret';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'10.0.0.%';
FLUSH PRIVILEGES;
-- Get current binary log position
SHOW MASTER STATUS\GReplica
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 2
relay_log = /var/log/mysql/relay-bin
read_only = ON-- Point replica to source (use SHOW MASTER STATUS values)
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '10.0.0.1',
SOURCE_USER = 'replicator',
SOURCE_PASSWORD = '...', -- supply the replication secret securely
SOURCE_LOG_FILE = 'mysql-bin.000003',
SOURCE_LOG_POS = 154;
START REPLICA;
-- Verify
SHOW REPLICA STATUS\G
-- Check: Replica_IO_Running = Yes, Replica_SQL_Running = Yes, Seconds_Behind_Source = 0Monitoring Queries
-- Connection statistics
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Max_used_connections';
-- InnoDB buffer pool hit ratio (should be > 99%)
SELECT
ROUND(100 - (
(SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_reads') /
(SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_read_requests')
) * 100, 2) AS buffer_pool_hit_pct;
-- Top 10 slow queries (requires performance_schema)
SELECT DIGEST_TEXT, COUNT_STAR, AVG_TIMER_WAIT / 1e12 AS avg_sec
FROM performance_schema.events_statements_summary_by_digest
ORDER BY AVG_TIMER_WAIT DESC
LIMIT 10;
-- Table sizes
SELECT table_name,
ROUND(data_length / 1024 / 1024, 2) AS data_mb,
ROUND(index_length / 1024 / 1024, 2) AS index_mb,
table_rows
FROM information_schema.tables
WHERE table_schema = 'mydb'
ORDER BY data_length DESC;
-- Check replication lag
SHOW REPLICA STATUS\G
-- Look at Seconds_Behind_SourceDocker Compose Setup
# docker-compose.yml
version: "3.9"
services:
mysql:
image: mysql:8.0
restart: unless-stopped
ports:
- "127.0.0.1:3306:3306"
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
MYSQL_USER: myapp
MYSQL_PASSWORD: secret
volumes:
- mysql_data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
command: >
--innodb-buffer-pool-size=512M
--max-connections=200
--slow-query-log=ON
--long-query-time=1
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-prootpass"]… (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- neon-functions – Hàm HTTP Node.js serverless chạy lâu, được triển khai lên nhánh Neon của bạn, với…
- new-relic – Cấu hình nền tảng quan sát New Relic để giám sát hạ tầng và ứng dụng.
- nfs-storage – Cấu hình máy chủ và máy khách NFS. Triển khai chia sẻ tệp qua mạng cho hệ thống Linux…
- noaa-radar-satellite-fetching – Tải sản phẩm NOAA NEXRAD và GOES từ kho lưu trữ đám mây công khai, chọn đúng site…
- observability-cloud-planning – Lập sổ đăng ký cloud, SLO và mức sẵn sàng ứng phó sự cố sau khi tiếp nhận yêu cầu. Dùng…
- observability-engineer – Xây dựng hệ thống monitoring, logging và tracing sẵn sàng cho production. Triển khai…
- observability-monitoring-monitor-setup – Thiết lập metrics, distributed tracing, tổng hợp log và dashboard để giám sát ứng dụng…
- observability-monitoring-slo-implement – Bạn là chuyên gia SLO (Service Level Objective), chuyên triển khai tiêu chuẩn độ tin cậy…