MySQL使用时遇到的问题

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,如果开启自动重连,会重连参数表示的连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值