zoukankan      html  css  js  c++  java
  • 【MySQL】MySQL规整化文件目录

    安装完MySQL数据库后,初始化数据目录至某一个目录下,各种目录和文件放在一起,不易区分,本篇将对其进行规整化,使其更规范。

    一 innodb的文件

    二 文件及参数说明

    1 ibdata1

    innodb引擎的默认表空间,早期的innodb存储引擎所有的数据文件都存放在这个文件中,虽然可以指定多个,但是它只能对最后一个文件进行扩展,这个表空间不能缩小,会变得无限大。

    1)innodb_data_home_dir

    这是innodb表的目录共用设置,如果没有在my.cnf进行设置,innodb将使用MySQL的datadir目录为缺省目录,如果设定一个空字串,可以在innodb_data_file_path中设定绝对路径;

    mysql> show variables like 'innodb_data_home_dir';
    +----------------------+----------------------------+
    | Variable_name | Value |
    +----------------------+----------------------------+
    | innodb_data_home_dir | /u01/data/mydb/3306/ibdata |
    +----------------------+----------------------------+
    1 row in set (0.01 sec)

    2)innodb_data_file_path

    单独指定数据文件的路径与大小,数据文件的完整路径由innodb_data_home_dir与这里所设定的值的组合。文件大小以MB单位指定。因此在文件大小指定后必有“M”。innodb也支持缩写“G”。

    示例:innodb_data_file_path=ibdata1:12M;ibdata2:20M;ibdata3:20M:autoextend

    mysql> show variables like 'innodb_data_file_path';
    +-----------------------+------------------------+
    | Variable_name | Value |
    +-----------------------+------------------------+
    | innodb_data_file_path | ibdata1:12M:autoextend |
    +-----------------------+------------------------+
    1 row in set (0.01 sec)

    2 redo log

    redo用于记录事务操作变化,记录的是数据被修改之后的值。

    1)innodb_log_group_home_dir

    innodb重做日志文件的目录路径,如果没有指定任何innodb日志变量,则默认是在MySQL数据目录中创建两个名为ib_logfile0和ib_logfile1的文件。

    mysql> show variables like 'innodb_log_group_home_dir';
    +---------------------------+----------------------------+
    | Variable_name | Value |
    +---------------------------+----------------------------+
    | innodb_log_group_home_dir | /u01/data/mydb/3306/iblogs |
    +---------------------------+----------------------------+
    1 row in set (0.01 sec)

    2)innodb_log_files_in_group

    日志组中的日志文件数,innodb以循环方式写入文件,默认(和推荐)值为2,文件的位置由innodb_log_group_home_dir指定。

    mysql> show variables like 'innodb_log_files_in_group';
    +---------------------------+-------+
    | Variable_name | Value |
    +---------------------------+-------+
    | innodb_log_files_in_group | 2 |
    +---------------------------+-------+
    1 row in set (0.01 sec)

    3)innodb_log_file_size

    日志组中每个日志文件的大小(以字节为单位)。日志文件(innodb_log_file_size*innodb_log_files_in_group)的组合大小不能超过略小于512GB的最大值,默认是48M,最小值为4M。

    mysql> show variables like 'innodb_log_file_size';
    +----------------------+----------+
    | Variable_name | Value |
    +----------------------+----------+
    | innodb_log_file_size | 50331648 |
    +----------------------+----------+
    1 row in set (0.02 sec)

    3 innodb_file_per_table

    可以修改innodb为独立表空间模式,每个数据库的每个表都会生成一个数据空间,独立表空间。

    优点:

    • 每个表都有自己独立的表空间;
    • 每个表的数据和索引都会存在自己的表空间中;
    • 可以实现单表在不同的数据库中移动;
    • 空间可以回收(除drop table操作外,表空间不能自己回收);

    注:支持在线修改。set global innodb_file_per_table=1;

    mysql> show variables like 'innodb_file_per_table';
    +-----------------------+-------+
    | Variable_name | Value |
    +-----------------------+-------+
    | innodb_file_per_table | ON |
    +-----------------------+-------+
    1 row in set (0.01 sec)

    4 undo

    对记录做变更操作时不仅会产生redo,也会产生undo记录(insert、update和delete),但undo只记录变更前的旧数据,undo记录默认被记录到系统表空间(ibdata1)中,但从MySQL 5.6开始,就可以使用独立的undo表空间了。采用独立表空间,不用担心undo会把ibdata1文件变大,也可以将其部署到不同I/O类型的文件位置。

    1)innodb_undo_directory

    undo文件的存储目录;

    mysql> show variables like 'innodb_undo_directory';
    +-----------------------+-------+
    | Variable_name | Value |
    +-----------------------+-------+
    | innodb_undo_directory | ./ |
    +-----------------------+-------+
    1 row in set (0.01 sec)

    2)innodb_undo_logs

    undo回滚段的数量,默认是128个,通过该参数,可以将一个大的回滚段拆分成多个小的回滚段,每个undo回滚段最多存放1024个事务;

    mysql> show variables like 'innodb_undo_logs';
    +------------------+-------+
    | Variable_name | Value |
    +------------------+-------+
    | innodb_undo_logs | 128 |
    +------------------+-------+
    1 row in set (0.02 sec)

    3)innodb_undo_tablespaces

    代表undo表空间的个数,表空间中有undo日志文件,默认大小是10M,表空间个数默认值为0;undo表空间的数量最少为2个,因为undo日志的truncate操作由purge协调线程发起,在truncate某个undo日志表空间的过程中,保证有一个可用的undo日志表空间能提供给用户使用,从而实现在线truncate。

    mysql> show variables like 'innodb_undo_tablespaces';
    +-------------------------+-------+
    | Variable_name | Value |
    +-------------------------+-------+
    | innodb_undo_tablespaces | 0 |
    +-------------------------+-------+
    1 row in set (0.02 sec)

    4)innodb_max_undo_log_size

    MySQL 5.7后新增参数,默认大小是1G,该参数用于控制最大undo表空间文件的大小,超过该值,就会触发truncate undo日志,truncate后的undo日志大小默认恢复为10MB。

    mysql> show variables like 'innodb_max_undo_log_size';
    +--------------------------+------------+
    | Variable_name | Value |
    +--------------------------+------------+
    | innodb_max_undo_log_size | 1073741824 |
    +--------------------------+------------+
    1 row in set (0.01 sec)

    5)innodb_undo_log_truncate

    MySQL 5.7之后支持在线删除无用的undo日志,默认是关闭的。

    6)innodb_purge_rseg_truncate_frequency

    MySQL 5.7后新增参数,用于控制回收undo日志的频率,默认值是128;表示purge undo轮询128次后,进行一次undo的truncate操作。undo日志空间在它的回滚段没有得到释放之前不会收缩,想要增加释放回滚区间的频率,就得降低innodb_purge_rseg_truncate_frequency的设定值。

    mysql> show variables like 'innodb_purge_rseg_truncate_fre%';
    +--------------------------------------+-------+
    | Variable_name | Value |
    +--------------------------------------+-------+
    | innodb_purge_rseg_truncate_frequency | 128 |
    +--------------------------------------+-------+
    1 row in set (0.01 sec)

    三 数据目录规整

    1 关闭数据库

    [root@strong ~]# mysqladmin -uroot -pmysql -S /u01/data/mydb/3306.sock shutdown

    2 创建目录

    [root@strong ~]# mkdir -p /u01/data/mydb/3306/db
    [root@strong ~]# mkdir -p /u01/data/mydb/3306/ibdata
    [root@strong ~]# mkdir -p /u01/data/mydb/3306/iblogs
    [root@strong ~]# mkdir -p /u01/data/mydb/3306/logs
    [root@strong ~]# mkdir -p /u01/data/mydb/3306/run
    [root@strong ~]# mkdir -p /u01/data/mydb/3306/binlog
    [root@strong ~]# mkdir -p /u01/data/mydb/3306/general
    [root@strong ~]# mkdir -p /u01/data/mydb/3306/error
    [root@strong ~]# mkdir -p /u01/data/mydb/3306/slow
    [root@strong ~]# chown -R mysql:mysql /u01/data/mydb/3306/

    3 移动数据库文件

    [root@strong mydb]# mv mysql/ 3306/db/
    [root@strong mydb]# mv performance_schema/ 3306/db/
    [root@strong mydb]# mv sys/ 3306/db/

    4 移动innodb文件

    [root@strong mydb]# mv ibdata1 3306/ibdata/
    [root@strong mydb]# mv ib_logfile* 3306/iblogs/

    5 修改配置文件

    [mysqld]
    
    #General#
    character_set_server=utf8
    user=mysql
    port=3306
    socket=/u01/data/mydb/3306/run/3306.sock
    pid_file=/u01/data/mydb/3306/run/3306.pid
    
    #Data Storage#
    basedir=/usr/local/mysql
    datadir=/u01/data/mydb/3306/db
    
    #Innodb#
    innodb_data_home_dir=/u01/data/mydb/3306/ibdata
    innodb_data_file_path=ibdata1:12M:autoextend
    innodb_log_group_home_dir=/u01/data/mydb/3306/iblogs
    innodb_log_files_in_group=2
    
    #Logging#
    log_error=/u01/data/mydb/3306/error/3306.err

    6 查看规整后的目录结构

    [root@strong ~]# ll /u01/data/mydb/3306/
    total 36
    drwxr-xr-x. 2 mysql mysql 4096 May 12 16:55 binlog
    drwxr-xr-x. 5 mysql mysql 4096 May 12 18:11 db
    drwxr-xr-x. 2 mysql mysql 4096 May 12 18:07 error
    drwxr-xr-x. 2 mysql mysql 4096 May 12 16:58 general
    drwxr-xr-x. 2 mysql mysql 4096 May 12 18:11 ibdata
    drwxr-xr-x. 2 mysql mysql 4096 May 12 17:25 iblogs
    drwxr-xr-x. 2 mysql mysql 4096 May 12 16:54 logs
    drwxr-xr-x. 2 mysql mysql 4096 May 12 18:11 run
    drwxr-xr-x. 2 mysql mysql 4096 May 12 16:58 slow
  • 相关阅读:
    thinkphp目录解析
    开发规范
    form
    命名空间
    类与对象
    OS知识点汇总
    C++每日一记!
    语言哲学和语言逻辑
    形式语言与自动机
    C#脚本
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975603.html
Copyright © 2011-2022 走看看