概述
由于工作和学习的需要,经常需要查看、编辑mysql配置,因此,本文将对相关的操作进行总结。这里只介绍Linux下的比较常见的配置(如没有特殊说明,这里mysql版本均为mysql8以上)。后续将持续拓展,更新。
安装mysql
redhat7安装mysql8,点此跳转。
mysql启动失败的解决方案
如果通过如下命令,启动mysql,发现没有返回,并且检查mysql的状态是start,而不是running时。 可以通过查看mysqld.log文件定位问题,它的默认路径是/var/log/mysqld.log。
systemctl start mysqld
当mysqld.log文件出现如下错误时:
Failed to connect to systemd notification socket named @/org/freedesktop/systemd1/notify.
这时候应该是mysql服务注册时,类型选错了,type属性应该修改为simple。我们可以修改 /usr/lib/systemd/system/mysqld.service这个文件,修改type属性:
Type=simple
保存文件,重启机器即可。
mysql与mysqld的区别
mysql是个命令行程序,而mysqld是服务。
查看安装文件路径
which mysql
查找配置文件my.cnf的位置
如果mysql已经启动了,通过查看mysql的线程,查看是否有明确指定加载my.cnf文件的路径。
ps -aux | grep mysql | grep 'my.cnf'
如果查询不到,则mysql启动时会读取安装目录根目录以及默认目录下的my.cnf文件。首先确认服务器是否有my.cnf文件。
locate my.cnf
确认有my.cnf文件之后,查看mysql启动时读取配置文件的默认目录。
mysql --help|grep 'my.cnf'
查询结果可能如下图:
这些就是mysql默认会搜寻my.cnf的目录,顺序排前的优先。
指定启动时读取配置的my.cnf文件路径
如果没有设置使用指定目录my.cnf文件及默认读取目录没有my.cnf文件,表示mysql启动时并没有加载配置文件,而是使用默认配置。这时候只需要在mysql默认读取的目录中,创建一个my.cnf文件,写入配置,重启mysql即可。
指定数据库目录
修改配置文件中的datadir属性。
相关命令所在的目录
/usr/bin (存放mysqladmin mysqldump等命令)
修改全局变量
修改全局变量有两种方式。
1、 直接修改配置文件,重启mysql服务。线上服务慎用。
2、 set global 变量名=变量值 或 set @@global.变量名=变量值。这个只修改了正在运行的mysql实例参数,下次重启时还是会失效,所以最终还是要修改配置文件。
mysql配置redo log
1、 通过配置文件中的的datadir属性,得知mysql的数据目录路径。默认情况下,InnoDB会在数据目录下创建两个5MB的redo log文件,名称分别是ib_logfile0和ib_logfile1。
2.可以通过修改配置文件的innodb_log_group_home_dir属性,修改redo log文件的目录,而且必须确保这个目录已存在。如下所示,这里将目录修改为/var/lib/mysql/redo_log。保存配置,我们重启mysql,应该就能在这个目录下看到了。
chmod 777 /var/lib/mysql/redo_log
innodb_log_group_home_dir=/var/lib/mysql/redo_log
3、innodb_log_files_in_group属性用来定义日志组中的日志文件数。推荐的默认值为2。
innodb_log_files_in_group=2
4、innodb_log_file_size属性日志组中每个日志文件的大小(以字节为单位)。日志文件的总大小(innodb_log_file_size* innodb_log_files_in_group)不能超过略小于512GB的最大值。
mysql配置bin log
1、如下图,第一个参数表示打开binlog日志;第二个参数表示binlog日志的基本文件名,后面会追加标识来表示每一个文件;第三个参数指定的是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录。在配置文件中也是相同的属性,保存修改,重启mysql后生效。
2、查看当前mysql的binlog情况,每当我们重启一次,会自动生成一个binlog文件。
show master status;
3、手动刷新binlog文件,同样会新建一个binlog文件。
flush logs;
4、清空binlog文件:
reset master;
5、查看binlog文件的内容,使用mysqlbinlog,它是用于查看binlog日志的工具:
mysqlbinlog binlog.000001
查询长事务
我们可以在information_schema库的innodb_trx这个表中查询长事务。比如下面的这个语句,用于查找持续时间超过60s的事务。
select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60