保姆级教程!Ubuntu双姿势部署MySQL:命令行 vs Docker,附远程配置+基础操作大全

在Ubuntu系统上下载和安装MySQL数据库可以通过命令行直接安装或使用Docker。以下是两种方法的详细步骤:
ps:如果使用云服务器的话,一定要记得打开安全组(即打开MySQL数据库运行的默认端口号3306)打开。


方法一:使用命令行安装MySQL

  1. 更新包索引
    确保系统包索引是最新的:

    sudo apt update
    
  2. 安装MySQL服务器
    使用apt安装MySQL服务器软件包:

    sudo apt install mysql-server
    
  3. 验证MySQL服务状态
    安装完成后,检查MySQL服务是否运行:

    sudo systemctl status mysql
    

    如果服务未启动,可以启动它:

    sudo systemctl start mysql
    
  4. 设置MySQL
    运行安全配置脚本,设置root密码并移除不安全的默认设置:

    sudo mysql_secure_installation
    

    根据提示设置root用户密码、移除匿名用户、禁用远程root登录等。

  5. 登录MySQL
    使用以下命令登录MySQL:

    sudo mysql -u root -p
    

    输入设置的密码即可进入MySQL命令行。

  6. (可选)设置开机启动
    确保MySQL随系统启动:

    sudo systemctl enable mysql
    

方法二:使用Docker安装MySQL

  1. 安装Docker
    如果系统中尚未安装Docker,先安装Docker:

    sudo apt update
    sudo apt install docker.io
    sudo systemctl start docker
    sudo systemctl enable docker
    
  2. 拉取MySQL镜像
    从Docker Hub拉取官方MySQL镜像(例如最新版本或指定版本,如mysql:8.0):

    docker pull mysql:latest
    
  3. 运行MySQL容器
    使用以下命令启动MySQL容器,设置root密码和数据持久化:

    docker run -d --name mysql-container \
    -e MYSQL_ROOT_PASSWORD=your_root_password \
    -v mysql-data:/var/lib/mysql \
    -p 3306:3306 \
    mysql:latest
    
    • -d:后台运行容器。
    • --name:指定容器名称。
    • -e MYSQL_ROOT_PASSWORD:设置MySQL root用户密码。
    • -v mysql-data:/var/lib/mysql:创建持久化卷存储MySQL数据。
    • -p 3306:3306:映射容器端口到主机端口。
  4. 验证容器运行
    检查Docker容器是否正常运行:

    docker ps
    
  5. 连接MySQL
    使用以下命令进入容器并登录MySQL:

    docker exec -it mysql-container mysql -u root -p
    

    输入设置的your_root_password即可进入MySQL命令行。

    或者,使用主机上的MySQL客户端连接:

    mysql -h 127.0.0.1 -u root -p
    
  6. (可选)管理容器

    • 停止容器:

      docker stop mysql-container
      
    • 启动容器:

      docker start mysql-container
      
    • 删除容器(数据卷仍保留):

      docker rm mysql-container
      

注意事项

  • 命令行安装

    • 适合需要直接在主机上运行MySQL的场景。

    • 安装后MySQL配置文件通常位于/etc/mysql/,数据存储在/var/lib/mysql/

    • 确保防火墙允许3306端口(如果需要远程访问):

      sudo ufw allow 3306
      
  • Docker安装

    • 适合开发、测试或需要隔离环境的场景。
    • 数据持久化依赖Docker卷,删除容器不会丢失数据。
    • 确保Docker服务正常运行,检查端口冲突。
  • 安全性

    • 无论哪种方法,都建议设置强密码并限制远程访问。
    • Docker方式需要注意容器网络安全配置。
  • 版本选择

    • 命令行安装默认使用Ubuntu软件源中的MySQL版本(可能不是最新)。
    • Docker可以通过mysql:tag指定版本(如mysql:5.7mysql:8.0)。

配置Docker容器中的MySQL以支持远程访问

本教程指导你在Ubuntu云服务器上,通过修改Docker容器运行的MySQL镜像配置,启用远程访问MySQL数据库。假设你已运行MySQL容器(例如命名为mysql-container)。

前提条件

  • Ubuntu云服务器,安装了Docker。
  • 运行中的MySQL容器(例如通过docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=your_password -p 3306:3306 mysql:latest启动)。
  • 具有服务器的公网IP或内网IP。

步骤

1. 确保容器端口映射正确

MySQL默认使用3306端口,确认容器已映射该端口到主机:

  • 检查容器状态:

    docker ps
    

    确认

    PORTS
    

    列显示

    0.0.0.0:3306->3306/tcp
    

  • 如果未映射端口,停止并删除容器:

    docker stop mysql-container
    docker rm mysql-container
    
  • 重新运行容器,正确映射端口:

    docker run -d --name mysql-container \
    -e MYSQL_ROOT_PASSWORD=your_password \
    -v mysql-data:/var/lib/mysql \
    -p 3306:3306 \
    mysql:latest
    

2. 配置MySQL用户以允许远程访问

Docker中的MySQL默认监听所有IP(bind-address=0.0.0.0),但需要配置用户权限:

  • 进入容器并登录MySQL:

    docker exec -it mysql-container mysql -u root -p
    

    输入

    your_password
    

    登录。

  • 创建支持远程访问的用户(例如

    remote_user
    

    ):

    CREATE USER 'remote_user'@'%' IDENTIFIED BY 'strong_password';
    GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    • '%'允许从任何IP连接,也可指定特定IP(如'192.168.1.100')。
    • 替换strong_password为安全密码。

3. 修改MySQL配置文件(可选)

如果需要自定义配置(如调整bind-address或启用SSL),需映射MySQL配置文件:

  • 在主机创建配置文件(例如

    /path/to/my.cnf
    

    ):

    sudo mkdir -p /path/to/mysql
    sudo nano /path/to/mysql/my.cnf
    

    添加以下内容:

    [mysqld]
    bind-address = 0.0.0.0
    

    保存并退出。

  • 停止并删除现有容器:

    docker stop mysql-container
    docker rm mysql-container
    
  • 重新运行容器,映射配置文件:

    docker run -d --name mysql-container \
    -e MYSQL_ROOT_PASSWORD=your_password \
    -v mysql-data:/var/lib/mysql \
    -v /path/to/mysql/my.cnf:/etc/mysql/my.cnf \
    -p 3306:3306 \
    mysql:latest
    

4. 重启容器以应用更改

如果修改了配置文件或用户权限,重启容器:

docker restart mysql-container
  • 验证容器运行:

    docker ps
    
  • 检查MySQL日志:

    docker logs mysql-container
    

5. 配置防火墙和云服务器安全组

  • 允许3306端口通过Ubuntu防火墙:

    sudo ufw allow 3306
    
  • 在云服务器提供商的安全组或网络规则中,开放3306端口,限制来源IP(若需提高安全性)。

6. 测试远程连接

在远程机器上使用MySQL客户端测试连接:

mysql -h <server_ip> -u remote_user -p
  • 替换<server_ip>为云服务器的公网IP。
  • 输入strong_password后应能连接。
  • 或者使用工具如MySQL Workbench,配置IP、端口(3306)、用户名和密码。

注意事项

  • 安全性

    • 使用强密码,避免简单密码。
    • 限制远程访问IP(在MySQL用户设置或防火墙规则中)。
    • 考虑启用SSL/TLS(参考MySQL官方文档配置)。
    • 避免直接暴露root用户。
  • 持久化

    • 数据卷(如mysql-data)确保数据不丢失。
    • 配置文件映射(如my.cnf)确保配置持久化。
  • 故障排查

    • 检查MySQL日志:docker logs mysql-container
    • 确认端口开放:telnet <server_ip> 3306
    • 验证用户权限:登录MySQL后运行SELECT user, host FROM mysql.user;
  • 云服务器网络

    • 确保公网IP可达,检查云平台网络设置。

总结

通过正确映射端口、配置MySQL用户、调整防火墙和安全组,你可以让云服务器上的Docker MySQL支持远程访问。如果遇到问题,检查日志或提供错误信息以进一步排查。

快速入门

以下是MySQL命令行的基本操作教程,涵盖常用命令和操作,适合初学者快速上手。假设你已通过命令行登录MySQL(例如 mysql -u root -pdocker exec -it mysql-container mysql -u root -p)。


MySQL命令行基本操作

1. 登录MySQL

  • 命令:

    mysql -u <username> -p
    
    • -u <username>:指定用户名(如 rootremote_user)。
    • -p:提示输入密码。
  • 示例:

    mysql -u root -p
    

    输入密码后进入MySQL命令行,提示符为 mysql>


2. 数据库操作

  • 查看所有数据库

    SHOW DATABASES;
    
  • 创建数据库

    CREATE DATABASE <database_name>;
    

    示例:

    CREATE DATABASE mydb;
    
  • 选择数据库

    USE <database_name>;
    

    示例:

    USE mydb;
    
  • 删除数据库

    DROP DATABASE <database_name>;
    

    示例:

    DROP DATABASE mydb;
    

3. 表操作

  • 查看当前数据库中的表

    SHOW TABLES;
    
  • 创建表

    CREATE TABLE <table_name> (
      column1 datatype constraints,
      column2 datatype constraints,
      ...
    );
    

    示例:

    CREATE TABLE users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(50) NOT NULL,
      email VARCHAR(100) UNIQUE
    );
    
  • 查看表结构

    DESCRIBE <table_name>;
    

    或:

    SHOW COLUMNS FROM <table_name>;
    

    示例:

    DESCRIBE users;
    
  • 删除表

    DROP TABLE <table_name>;
    

    示例:

    DROP TABLE users;
    

4. 数据操作(CRUD)

  • 插入数据(Create)

    INSERT INTO <table_name> (column1, column2, ...) VALUES (value1, value2, ...);
    

    示例:

    INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
    
  • 查询数据(Read)

    SELECT column1, column2, ... FROM <table_name> [WHERE condition];
    

    示例:

    • 查询所有列:

      SELECT * FROM users;
      
    • 带条件查询:

      SELECT name FROM users WHERE id = 1;
      
  • 更新数据(Update)

    UPDATE <table_name> SET column1 = value1, column2 = value2, ... WHERE condition;
    

    示例:

    UPDATE users SET email = 'new_email@example.com' WHERE id = 1;
    
  • 删除数据(Delete)

    DELETE FROM <table_name> WHERE condition;
    

    示例:

    DELETE FROM users WHERE id = 1;
    
    • 删除所有数据:

      DELETE FROM users;
      

5. 用户和权限管理

  • 创建用户

    CREATE USER '<username>'@'<host>' IDENTIFIED BY '<password>';
    

    示例:

    CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password123';
    
  • 授予权限

    GRANT <privileges> ON <database>.<table> TO '<username>'@'<host>';
    

    示例:

    GRANT ALL PRIVILEGES ON mydb.* TO 'new_user'@'localhost';
    
  • 查看用户权限

    SHOW GRANTS FOR '<username>'@'<host>';
    

    示例:

    SHOW GRANTS FOR 'new_user'@'localhost';
    
  • 撤销权限

    RELOAD PRIVILEGES ON <database_name> FROM <table_name> FROM '<username>;
    
  • 删除用户

    DROP USER '<username>'@'<host>';
    

    示例:

    DROP USER 'new_user'@'localhost';
    
  • 刷新权限

    FLUSH PRIVILETS;
    

6. 其他常用操作

  • 查看当前数据库

    SELECT DATABASE();
    
  • 查看MySQL版本

    SELECT VERSION();
    
  • 执行SQL文件

    SOURCE <source_file_path>;
    

    或在命令行外:

    mysql -u root -p < file.sql
    
  • 备份数据库(命令行外):

    mysqldump -u <username> -p <database_name> > backup.sql
    

    示例:

    mysqldump -u root -p mydb > backup.sql
    
  • 恢复数据库(命令行外):

    mysql -u <username> -p <database_name> < backup.sql
    
  • 退出MySQL

    EXIT;
    

    或:

    \q
    

注意事项

  • 命令大小写
    • SQL关键字不区分大小写(如 SELECTselect 等价)。
    • 但在某些操作系统(如Linux)上,数据库和表名可能区分大小写。
  • 分号
    • 每条SQL语句需以 ; 结尾。
  • 权限
    • 确保登录用户有足够权限执行操作。
  • 备份
    • 修改数据前,建议备份重要数据。
  • 错误排查
    • 遇到错误,查看错误代码和消息,或检查MySQL日志(容器内:docker logs mysql-container)。

示例:完整工作流程

  1. 创建并使用数据库:

    CREATE DATABASE testdb;
    USE testdb;
    
  2. 创建表并插入数据:

    CREATE TABLE employees (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50),
        salary INT
    );
    INSERT INTO employees (name, salary) VALUES ('Bob', 5000);
    
  3. 查询数据:

    SELECT * FROM employees;
    
  4. 更新数据:

    UPDATE employees SET salary = 6000 WHERE id = 'Bob';
    
  5. 删除数据:

    DELETE FROM employees WHERE id = 1;
    

扩展

  • 复杂查询
    学习 JOINGROUP BYORDER BY 等高级查询。
  • 索引
    使用 CREATE INDEX 优化查询性能。
  • 事务
    使用 BEGINCOMMITROLLBACK 管理数据一致性。

如果有具体问题(如报错或特定操作),请提供更多细节,我可以进一步协助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值