Debian 上 MySQL 从安装到进阶的实用教程
一 安装与初始化
sudo apt update && sudo apt upgrade -ysudo apt install mysql-server -ysudo systemctl status mysql 查看状态。sudo mysql_secure_installationmysql -u root -p,输入刚设置的密码进入 MySQL 命令行。二 服务管理与基础配置
sudo systemctl start|stop|restart|status mysqlsudo systemctl enable mysql/etc/mysql/mysql.conf.d/mysqld.cnf(或 /etc/mysql/my.cnf)bind-address:监听地址,设为 127.0.0.1 仅本地,设为 0.0.0.0 允许远程(需配合防火墙与权限)max_connections:最大连接数innodb_buffer_pool_size:InnoDB 缓冲池大小(建议为可用内存的约 50%~70%)bind-address 并重启 MySQLsudo ufw allow 3306/tcpsudo firewall-cmd --zone=public --add-service=mysql --permanent && sudo firewall-cmd --reload/etc/init.d/mysql)三 用户与数据库常用操作
mysql -u root -pCREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPass!';
GRANT ALL PRIVILEGES ON mydb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPass!';
GRANT ALL PRIVILEGES ON mydb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
SHOW DATABASES;SELECT user,host FROM mysql.user;mysqladmin -u root -p statusmysqldump -u root -p mydb > mydb_backup.sqlmysql -u root -p mydb < mydb_backup.sql四 常见问题与排查
sudo tail -n50 /var/log/mysql/error.logsudo mkdir -p /var/run/mysqld
sudo chown mysql:adm /var/run/mysqld
sudo systemctl restart mysql
sudo systemctl status mysqlsudo ss -lntp | grep 3306bind-address 与防火墙(UFW/firewalld)是否放行 3306'user'@'%')并授予权限/etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 下添加 skip-grant-tablessudo systemctl restart mysqlmysql -u rootFLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass!';
FLUSH PRIVILEGES;
skip-grant-tables 并重启[client] 与 [mysqld] 使用 utf8mb4:[client]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
SHOW VARIABLES LIKE 'character_set%';五 进阶与性能优化
innodb_buffer_pool_size:建议为物理内存的 50%~70%max_connections:结合并发与内存评估(如 151 起步,视业务增减)query_cache_type=0(MySQL 8.0 已移除查询缓存,重点优化慢查询与索引)[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
mysqladmin status、SHOW PROCESSLIST;mysqldump 全量备份后再升级