mysql开启日志功能
- 通过mysql -u root -p进入mysql命令行
- show variables like ‘%log%’;会显示所有和日志有关的信息
- log_error,表示错误日志的存储路径,该文件保存mysql的错误信息
- general_log_file,表示通用日志的存储路径,该文件保存所有执行过的mysql语句(包括代码中调用的mysql API)
- slow_query_log_file,表示慢语句日志的存储路径,该文件保存所有执行时间超过某个值的mysql语句(时间值由另一个变量设置)
- 如果想查询某一个,比如log_error,可以使用show variables like ‘%log_error%’;
如果上面几个日志文件的路径都是空,或者想要更改路径,可以在配置文件中更改
- 配置文件是/etc/mysql/conf.d中的mysql.cnf(不知道为什么只有我的在这里)
- 打开这个文件,在[mysqld]下面添加路径
- log_error=/var/log/mysql/error.log(路径可以自己更改)
- general_log=ON(表示开启通用日志功能)
- general_log_file=/var/log/mysql/general.log
- slow_query_log=ON(表示开启慢查询日志功能)
- slow_query_log_file=/var/log/mysql/slow.log
重启mysql
- service mysql restart可以重启mysql
- /etc/init.d/mysql restart也可以重启mysql
重启mysql时出现错误
- 错误信息mysql.serviceJob for mysql.service failed because the control process exited with error code. See “systemctl status mysql.service” and “journalctl -xe” for details.
- 一种可能是配置文件写错,哪个单词拼错等都会导致这个问题,这个大概可以从错误日志中发现
- 另一种可能是日志文件的权限问题,通常都是系统自己创建日志文件,不需要自己手动创建,如果手动创建,那么创建的日志文件的所属id不是mysql而是root,mysql无权限写入(可以通过更改id解决,也可以删了重启,因为mysql会自己创建)
程序运行过程中一段时间没有与mysql服务器通讯会自动断开连接
- 一般这个值默认是8小时,解决方法有两个
- 一种是程序设计定时任务,每隔多长时间访问一次,干什么都行,只要执行mysql语句
- 另一种是更改配置文件,将这个时间增大,在配置文件中(/etc/mysql/conf.d/mysql.conf)的[mysqld]下面添加
- wait_timeout=604800(秒数,改觉得可以的值)
- interactive_timeout=604800(秒数,同理)
- 通常这两个一起设置
将中文存储到mysql中出现乱码
- 配置文件中添加character-set-server=utf8,设置编码为utf8
建表的时候在后面添加DEFAULT CHARSET=UTF8
//引自菜鸟教程 CREATE TABLE runoob_tbl( -> runoob_id INT NOT NULL AUTO_INCREMENT, -> runoob_title VARCHAR(100) NOT NULL, -> runoob_author VARCHAR(40) NOT NULL, -> submission_date DATE, -> PRIMARY KEY ( runoob_id ) -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 在程序代码中设置utf8编码格式,以C++为例
::mysql_set_character_set(&conn_, "utf8");
多线程下对数据库的访问出现的各种各样的错误
- 记得加锁,加锁,以前一直以为mysql自己会加锁,天真:cry:
mysql的自动重连功能(以C++为例,不知道好不好使)
char value = 1; ::mysql_options(&conn_, MYSQL_OPT_RECONNECT, static_cast<char*>(&value));
在需要检测是否已断开时可以使用::mysql_ping(&conn_);
- 如果连接正常,返回0,否则-1,如果开启自动重连,会重连参数表示的连接