安装完MySQL数据库后,初始化数据目录至某一个目录下,各种目录和文件放在一起,不易区分,本篇将对其进行规整化,使其更规范。
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)
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)
可以修改innodb为独立表空间模式,每个数据库的每个表都会生成一个数据空间,独立表空间。
优点:
注:支持在线修改。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)
对记录做变更操作时不仅会产生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)
[root@strong ~]# mysqladmin -uroot -pmysql -S /u01/data/mydb/3306.sock shutdown
[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/
[root@strong mydb]# mv mysql/ 3306/db/
[root@strong mydb]# mv performance_schema/ 3306/db/
[root@strong mydb]# mv sys/ 3306/db/
[root@strong mydb]# mv ibdata1 3306/ibdata/
[root@strong mydb]# mv ib_logfile* 3306/iblogs/
[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
[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