【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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值