作为一名长期从事Linux系统运维的工程师,我经常需要在各种环境下部署MySQL数据库。今天我将完整记录在Ubuntu Server 22.04 LTS上安装MySQL 8.0的全过程,包含大量实际运维中的经验技巧。
首先需要从Ubuntu官网获取最新的LTS版本镜像。这里我选择的是Ubuntu Server 22.04.3 LTS版本,LTS代表长期支持版本,可以获得5年的安全更新支持(如果启用Ubuntu Pro可延长至10年)。
专业建议:生产环境务必选择LTS版本,非LTS版本只有9个月的支持周期
下载完成后,在VMware Workstation 17 Pro中创建新的虚拟机。关键配置参数如下:
安装过程中有几个需要特别注意的配置点:
code复制https://mirrors.tuna.tsinghua.edu.cn/ubuntu
磁盘分区:对于新手建议使用默认的LVM分区方案。它会自动创建:
用户设置:务必设置强密码,建议包含大小写字母、数字和特殊字符。示例:
SSH服务:强烈建议勾选"Install OpenSSH server"选项,方便后续远程管理。
Featured Server Snaps:这是Ubuntu特有的Snap软件包,初次安装建议不选择任何选项,保持系统纯净。
安装完成后系统会自动重启,此时一个基础的Ubuntu Server系统就准备就绪了。
在安装MySQL前,需要先更新系统软件包并安装必要的依赖:
bash复制sudo apt update
sudo apt upgrade -y
sudo apt install -y wget gnupg lsb-release
经验之谈:生产环境建议先测试升级影响后再执行apt upgrade,避免不兼容问题
Ubuntu自带的MySQL版本可能不是最新的,建议使用MySQL官方提供的APT源:
bash复制wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
在配置界面中选择:
更新APT缓存:
bash复制sudo apt update
执行以下命令安装MySQL 8.0社区版:
bash复制sudo apt install -y mysql-server
安装过程会自动:
安装完成后检查服务状态:
bash复制sudo systemctl status mysql
MySQL提供了一个安全配置向导,强烈建议运行:
bash复制sudo mysql_secure_installation
配置选项说明:
Ubuntu 22.04默认使用auth_socket认证,为了方便管理,我们改为密码认证:
bash复制sudo mysql
执行以下SQL命令:
sql复制ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'My$ql8Secure!';
FLUSH PRIVILEGES;
exit
现在可以使用密码登录MySQL:
bash复制mysql -u root -p
如果需要从其他主机访问MySQL,需要修改配置文件:
bash复制sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
找到bind-address配置项,修改为:
code复制bind-address = 0.0.0.0
然后创建远程访问用户(比直接开放root更安全):
sql复制CREATE USER 'remote_dba'@'%' IDENTIFIED BY 'Remote$123';
GRANT ALL PRIVILEGES ON *.* TO 'remote_dba'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
重启MySQL服务使配置生效:
bash复制sudo systemctl restart mysql
根据服务器配置调整MySQL参数,编辑配置文件:
bash复制sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]段落下添加:
code复制# 内存配置
innodb_buffer_pool_size = 1G # 建议为物理内存的50-70%
innodb_log_file_size = 256M
# 连接配置
max_connections = 200
thread_cache_size = 10
# 其他优化
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
重要提示:修改innodb_buffer_pool_size后,需要删除ib_logfile*并重启MySQL
如果系统启用了UFW防火墙,需要开放MySQL端口:
bash复制sudo ufw allow 3306/tcp
sudo ufw enable
sql复制CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE testdb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
INSERT INTO users (username, email) VALUES
('admin', 'admin@example.com'),
('user1', 'user1@example.com');
使用mysqldump进行备份:
bash复制mysqldump -u remote_dba -p --single-transaction --routines --triggers testdb > testdb_backup.sql
恢复数据库:
bash复制mysql -u remote_dba -p testdb < testdb_backup.sql
如果无法连接MySQL,按以下步骤检查:
sudo systemctl status mysqlsudo netstat -tulnp | grep 3306sudo ufw statussudo tail -f /var/log/mysql/error.log使用以下命令监控MySQL性能:
bash复制# 实时监控
mysqladmin -u root -p processlist
# 查看状态变量
mysql -u root -p -e "SHOW GLOBAL STATUS"
# 查看系统变量
mysql -u root -p -e "SHOW GLOBAL VARIABLES"
如果忘记root密码,可以这样重置:
sudo systemctl stop mysqlsudo mysqld_safe --skip-grant-tables &mysql -u rootsql复制FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
exit
在实际生产环境中,MySQL的安装和配置需要根据具体业务需求进行调整。建议在正式部署前进行充分的测试,特别是内存相关参数的配置,会直接影响数据库性能。