Ubuntu MySQL数据库常见问题解答
sudo systemctl status mysql确认服务是否运行(显示“active (running)”为正常)。sudo tail -n 50 /var/log/mysql/error.log查看具体错误原因(如配置文件语法错误、磁盘空间不足等)。sudo dpkg-reconfigure mysql-server-<version>(替换为实际版本)修复安装,或重新安装MySQL:sudo apt remove --purge mysql-server && sudo apt install mysql-server。/var/run/mysqld/mysqld.sock)。若路径不存在,创建目录并修改权限:sudo mkdir -p /var/run/mysqld && sudo chown mysql:mysql /var/run/mysqld,然后重启服务:sudo systemctl restart mysql。/etc/mysql/mysql.conf.d/mysqld.cnf)中bind-address设置为0.0.0.0(允许所有IP连接)或服务器实际IP;sudo ufw allow 3306/tcp;GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;(将username、password替换为实际值)。sudo systemctl stop mysql;sudo mysqld_safe --skip-grant-tables &;mysql -u root(无需密码);FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';(替换new_password为新密码);exit && sudo systemctl restart mysql。mysql -u root -p;SELECT User, Host FROM mysql.user;(确认用户对应的Host是否为localhost或%);GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;(若需远程访问,将localhost改为%);ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; FLUSH PRIVILEGES;(适用于MySQL 8.0+版本)。mysqlcheck工具修复所有数据库:sudo mysqlcheck --all-databases --auto-repair --optimize --user=root --password;sudo mysqlcheck -u root -p your_database_name --auto-repair(替换your_database_name为实际数据库名);sudo apt autoremove;sudo apt clean;sudo journalctl --vacuum-size=100M(限制日志大小为100MB);df -h(确认/分区剩余空间是否充足,建议保留至少10%空闲空间)。/etc/mysql/mysql.conf.d/mysqld.cnf,设置innodb_buffer_pool_size为服务器内存的50%-70%(如16GB内存设为8GB)、innodb_log_file_size为256M、max_connections根据负载调整(建议不超过200);EXPLAIN分析慢查询(如EXPLAIN SELECT * FROM users WHERE id=1;),为常用查询条件列创建索引(如CREATE INDEX idx_username ON users(username););OPTIMIZE TABLE整理表碎片(如OPTIMIZE TABLE large_table;),减少数据碎片对性能的影响;SHOW PROCESSLIST查看当前运行的查询,找出长时间运行的查询并优化;使用SHOW STATUS关注关键指标(如InnoDB_buffer_pool_wait_free,若值过高说明缓冲池不足)。