【mysql使用系列】mysql5.7安装和物理文件解读
安装规划
不要安装在根目录下,尽量挂在数据盘下。通用做法:数据盘/data。
mysql下载、安装和配置
下载、解压、环境变量配置
groupadd mysql |
创建数据、日志、配置文件目录
mkdir -p /data/mysql/{data,binlogs,log,etc,run} |
增加配置文件
编译版本的mysql,配置文件只允许在/etc/my.cnf(或者/etc/mysql/my.cnf、/usr/local/mysql/etc/my.cnf).vim etc/my.cnf
[client] |
mysql初始化和物理文件解读
参考 https://dev.mysql.com/doc/refman/5.7/en/programs-overview.html ,说明下mysql组件中最常用的三个组件:
- mysqld
mysql daemon,mysql server。 - mysql
The command-line tool for interactively entering SQL statements or executing them from a file in batch mode) - mysql_ssl_rsa_setup
This program creates the SSL certificate and key files and RSA key-pair files required to support secure connections, if those files are missing.
mysql服务端启动核心-mysqld帮助
初始化mysql数据库
mysqld --initialize-insecure --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data |
查看数据库物理文件
cd /data/mysql/data/
mysql系统数据库
在MySQL5.7.17中,系统数据库包括information_schema,mysql,sys,performance_schema
information_schema库
提供了数据库的元数据信息,是数据库的数据,比如数据库的名字,数据库中的表名,字段名,字段类型等,可以说是数据库的数据字典信息。
这个库中的信息并非物理地保存在表中,而是动态地去读取其他文件得到的,比如上面一开始提到的共享表空间,对于用户数据中的对象,比如表结构等,都保存在共享表空间中,
information_schema库中的一些信息可以认为是直接映射到共享表空间中的信息的。因此第一个截图中,并没有information_schema的路径(文件夹)performance_schema库
是数据库性能相关的信息的数据,记录的是数据库服务器的性能参数。
1)保留进程等待信息,包括锁,互斥变量,文件信息等。
2)保存历史事件汇总信息,为MySQL服务器性能评估提供参考信息
3)配置型选项,来决定是否记录一些与性能相关的信息,比如profile信息等,参考http://www.cnblogs.com/wy123/p/6979499.htmlsys库
可以根据sys库中的数据快速了解系统的运行信息,方便地查询出来数据库的信息,在性能瓶颈,自动化吧运维等方面都有很大的帮助
sys库中的信息是通过视图的方式,将information_schema和performance_schema库中的数据结合起来,可以得到更加直观和容易理解的信息mysql库
存储了系统的用户权限信息及帮助信息,新建的用户,用户的权限信息的都存储在MySQL库。比如在修改MySQL的root密码的时候,都要先use mysql这个系统库,然后再执行用户,授权等操作。
对于innodb表,如果是独立的表空间的话,数据库中的表结构以及数据都存储在数据库的路径下(而不是在共享表空间中ibdata1文件中)
但是数据中的其他对象,包括undo信息,也即数据被修改之后,事务提交之间的版本信息,仍然存储在共享表空间的ibdata1文件中
基于ibdata1文件的共享表空间
对于innodb,innodb_file_per_table选项决定了是否启动独立表空间,MySQL5.7中是默认启动的,也就是说MySQL的用户数据库将使用独立表空间来存储数据。
基于ibtmp1文件的临时表空间
临时表空间是存储全局级,回话级,事物级,检索级临时表对象的地方,有参数innodb_temp_data_file_path可以看到临时表空间的信息。
基于ib_logfileN的重做日志
redo日志默认情况下有两个文件,也即:ib_logfile0和ib_logfile1。
如果在数据库启动的过程中没有这两个文件,系统会默认自动生成这两个文件。默认情况下,ib_logfile0和ib_logfile1是两个独立的日志文件(可以配置的更多个ib_logfile文件),但是redo日志的写入在逻辑上对于ib_logfile0和ib_logfile1是连续的。重做日志是MySQL事物处理的核心文件,事务处理的核心之一是一致性,也就是说要么全做,要么全不做。
基于mysql-bin.X的binlog文件
bin-log日志记录数据中发生的写入性操作(增删改),但不记录查询操作,语句以事件的方式保存,描述了数据的更改过程,此日志对发生灾难时数据恢复、主从同步中起到了极为重要的作用。
mysql配置systemd启动
mysql配置systemd启动
cd /usr/lib/systemd/system |
最终的文件如下:
# systemd service file for MySQL forking server |
mysql启动
systemctl daemon-reload
systemctl enable mysqld.service
systemctl is-enabled mysqld
systemctl start mysqld.service
mysql修改root密码和访问权限
mysql -h localhost -u root |