一、初级 MySQL 操作

初级 MySQL 操作主要集中在基础数据库管理和常用 SQL 语句上,适合新手用户快速上手。

1.1 MySQL 安装与部署

安装 MySQL(以 Ubuntu 为例)

sudo apt update
sudo apt install mysql-server

安装完成后,可以通过以下命令检查 MySQL 是否启动:

sudo systemctl status mysql

启动 MySQL 服务:

sudo systemctl start mysql

1.2 登录 MySQL

使用命令行登录 MySQL 数据库:

mysql -u root -p

1.3 基本的 SQL 操作

  • 创建数据库

    CREATE DATABASE my_database;
    
  • 选择数据库

    USE my_database;
    
  • 创建数据表

    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100),
        email VARCHAR(100)
    );
    
  • 插入数据

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

    SELECT * FROM users;
    
  • 更新数据

    UPDATE users SET email = 'alice_new@example.com' WHERE id = 1;
    
  • 删除数据

    DELETE FROM users WHERE id = 1;
    

1.4 数据库备份与恢复

  • 备份数据库

    mysqldump -u root -p my_database > backup.sql
    
  • 恢复数据库

    mysql -u root -p my_database < backup.sql
    

二、中级 MySQL 操作

中级 MySQL 操作主要包括数据库管理、索引优化、事务控制以及多表操作等。

2.1 数据库设计与管理

2.1.1 外键约束

在表中定义外键,用于保持数据一致性。

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    amount DECIMAL(10, 2),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

2.1.2 多表连接查询(JOIN)

通过 JOIN 来执行多表查询。

  • 内连接(INNER JOIN)

    SELECT orders.order_id, users.name 
    FROM orders
    INNER JOIN users ON orders.user_id = users.id;
    
  • 左连接(LEFT JOIN)

    SELECT orders.order_id, users.name 
    FROM orders
    LEFT JOIN users ON orders.user_id = users.id;
    
  • 右连接(RIGHT JOIN)

    SELECT orders.order_id, users.name 
    FROM orders
    RIGHT JOIN users ON orders.user_id = users.id;
    

2.1.3 索引的使用

索引可以提高查询效率,但也会增加插入和更新的成本。

  • 创建索引

    CREATE INDEX idx_email ON users (email);
    
  • 删除索引

    DROP INDEX idx_email ON users;
    
  • 查看索引

    SHOW INDEX FROM users;
    

2.1.4 事务控制

  • 开始事务

    START TRANSACTION;
    
  • 提交事务

    COMMIT;
    
  • 回滚事务

    ROLLBACK;
    

2.2 中级性能优化

2.2.1 查询优化

  • 使用 EXPLAIN 分析查询

    EXPLAIN SELECT * FROM users WHERE email = 'alice@example.com';
    
  • 优化查询

    1. 避免 SELECT *,明确指定需要的列。
    2. 为常用的查询字段添加索引。

2.2.2 缓存查询结果

MySQL 提供了查询缓存机制,开启查询缓存可以加速重复查询的性能,但需要根据具体场景评估是否使用。

  • 启用查询缓存

    SET GLOBAL query_cache_size = 1048576;
    
  • 查看查询缓存状态

    SHOW STATUS LIKE 'Qcache%';
    

2.2.3 慢查询日志

启用慢查询日志可以帮助找到性能瓶颈。

  • 启用慢查询日志
    my.cnf 配置文件中设置:

    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/mysql-slow.log
    long_query_time = 2  # 设置记录慢查询的时间阈值,单位为秒
    
  • 查看慢查询日志
    使用 mysqldumpslow 命令分析慢查询日志:

    mysqldumpslow -t 10 /var/log/mysql/mysql-slow.log
    

三、高级 MySQL 操作

高级 MySQL 操作涵盖了高可用性、分布式架构、优化大规模数据处理等内容。

3.1 高可用性架构

3.1.1 MySQL 主从复制

MySQL 主从复制允许一个主库(Master)和多个从库(Slave)进行数据同步,常用于高可用性和负载均衡。

  • 配置主库
    在主库 my.cnf 配置文件中:

    [mysqld]
    server-id = 1
    log_bin = /var/log/mysql/mysql-bin.log
    
  • 配置从库
    在从库 my.cnf 配置文件中:

    [mysqld]
    server-id = 2
    relay_log = /var/log/mysql/mysql-relay-bin.log
    
  • 在主库上创建复制账号

    CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
    
  • 启动复制
    在从库执行:

    CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=  107;
    START SLAVE;
    

3.1.2 MySQL 集群

MySQL 集群是一种基于多节点的分布式架构,通常使用 MySQL NDB 集群或者第三方方案(如 Vitess)进行部署。

  • 部署 MySQL NDB 集群:需安装并配置 NDB 存储引擎和集群管理器。

3.2 数据库优化

3.2.1 数据库拆分与分区

  • 水平分区:根据某些字段值(如时间)将数据分布到不同的物理表中。

    CREATE TABLE orders_2023 PARTITION BY RANGE (YEAR(order_date)) (
        PARTITION p0 VALUES LESS THAN (2023),
        PARTITION p1 VALUES LESS THAN (2024)
    );
    
  • 垂直分区:根据字段的不同用途将不同的数据存储在不同的表中。

3.2.2 大数据处理优化

  • 批量插入数据:避免一次性插入大量单行数据,采用批量插入。

    INSERT INTO table (col1, col2) VALUES (value1, value2), (value3, value4), ...;
    
  • 分批处理:使用分页查询分批加载大数据量。

3.3 MySQL 安全性优化

  • 加密传输:启用 SSL/TLS 加密保护客户端和服务器之间的通信。

    [mysqld]
    ssl-ca=/path/to/ca-cert.pem
    ssl-cert=/path/to/server-cert.pem
    ssl-key=/path/to/server-key.pem
    
  • 限制访问:通过防火墙和 MySQL 的访问控制限制只有授权的 IP 地址可以访问 MySQL 服务。

  • 强密码策略:使用 validate_password 插件强制执行复杂的密码策略。

    INSTALL PLUGIN validate_password SONAME 'validate_password.so';
    SET GLOBAL validate_password.policy = STRONG;
    

总结

本文概述了 MySQL 从初级到高级的操作方法,包括数据库管理、查询优化、事务控制、备份恢复、高可用性架构、性能优化等方面。无论是小型项目还是大规模分布式系统,都可以根据需求选择合