mysql采坑总结(持续更新)

2019/04/18

简介

此篇主要介绍在平常工作中的有关mysql遇到的问题

问题

启动失败

问题 : 提示 :The server quit without updating PID file

原因 : 查看data/mysql.error日志,发现mysql-bin.0000xx被删除了找不到

#查看data/mysql.error日志
mysqld: File './mysql-bin.000006' not found (Errcode: 2 - No such file or directory)
2019-03-20T08:08:35.818705Z 0 [ERROR] Failed to open log (file './mysql-bin.000006', errno 2)
2019-03-20T08:08:35.818715Z 0 [ERROR] Could not open log file
2019-03-20T08:08:35.818722Z 0 [ERROR] Can't init tc log
2019-03-20T08:08:35.818726Z 0 [ERROR] Aborting

#原因分析
mysql-bin.0000xx被删除了找不到

解决 :

#解决方法
#清空 data/mysql-bin.index文件
echo > data/mysql-bin.index

mysql的vip同步

问题 : mysql 主从同步无法使用 vip漂移的方式

原因 : hearbeat 或者 keepalived 直接配置mysql 从库从vip同步 无效 应为mysql的server-id不一样 同步会失败

解决 : 使用第三方的中间件,如 mmm,mha等等


like查询出错

问题 : like查询出错( Unknown column ‘%%’ in ‘Where clause’)

img

img

原因 : like使用了双引好

参考链接 :

解决 : 将like字段修改为单引号


mysql初始化权限错误

问题 :

img

原因 : 网上说都是目录权限的问题,但是我感觉还有系统有关,具体原因还未深究,碰到的机率比较小(此种情况碰到过四五次每次都很头疼,总结下自己的几种解决方式)

参考链接 :

解决 :

  • 方式一 :

    mysqld --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data --initialize
    

    将其中的用户mysql改为root即可,但是此种方式生产环境不适用

  • 方式二(推荐):

    重新格式化mysql的数据磁盘,用ext4或者xfs,此种方式是我碰到该问题的解决方式

  • 方式三(推荐):

    父目录权限的问题,例如mysql安装在 /application/mysql内可能/application目录只有700的权限,那么就会初始化失败;此时修改 /application/mysql的目录拥有者无效

    解决

    方式一:修改父目录权限
    chmod 755 -R /application
    
    方式二:删除目录,修改默认创建的目录权限
    #删除application目录
    rm -rf /application
    vim /etc/profile
    将 umask 077 修改为 umask 022
    source /etc/profile
    

    img

  • 方式四:

    就是修改目录权限之类的,一般当时有时候可以解决,但是之后会碰到种种问题,不建议,


找不到/tmp/mysql.**

问题 :

img

原因 : 由于我在my.cnf中修改了sock的位置,所以默认从/tmp中无法找到mysql.sock报错.

img

参考链接 :

解决 :

添加 -S 参数指定sock位置

img

ysqladmin -uroot -p'L5rss.' password '123123' -S /application/mysql/data/mysql.sock;

常用命令

创建索引

create index code on t_region(code);
create index parent_code on t_region(parent_code);

文件导入/导出

#导入文件
load data local infile '..txt' into table t_record_watch_temp character set utf8 fields terminated by'\t' lines terminated by'\n'
#导出文件
select * from table into OUTFILE '/cache/watchtoFTP/...' FIELDS TERMINATED BY '|' ;

创建数据库

#创建数据库
create database zabbix DEFAULT CHARSET utf8mb4 COLLATE utf8_general_ci;

创建用户

#创建用户
create user 'zabbix'@'%' identified by 'zbpass';
#修改密码
mysqladmin -uroot -p123456 -S /data/3306/mysql.sock password "suprerwang"
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
UPDATE user SET host="%" WHERE user='root';

授权用户全部权限

#授权用户全部权限(该用户有没有授权 权限)
grant all on zabbix.* to 'zabbix'@'%' with grant option;
#授权管理员(with grant option 让该用户也有授权权限)
grant all privileges on *.* to system@'localhost' with grant option;
#授权时顺便修改密码
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO rep@'%' IDENTIFIED BY '123456'

授权用户部分权限

#命令:GRANT privileges ON databasename.tablename TO 'username'@'host' 
#说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).
#如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*. 
#例子: GRANT SELECT, INSERT ON test.user TO 'pig'@'%'; 
#GRANT ALL ON *.* TO 'pig'@'%'; 
#注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令(WITH GRANT OPTION): 
#GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

创建复制账户

#创建复制账户 mysql -uroot -phybj2013ABC -e
create user 'zabbix'@'117.71.46.%' identified by 'repl2017';
#授权 
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO 'repl'@'117.71.46.%';
#授权时顺便修改密码 (此命令 相当于 上面两个命令的和  创建一个用户和密码并授权这些权限)
#GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'%' IDENTIFIED BY 'repl2017'
grant all on zabbix.* to 'zabbix'@'%' with grant option;

刷新权限

#刷新权限
flush privileges;

去除重复查总数

#去除重复查总数
select count((distinct("去重的字段"))) from 表名

查询登录的用户

#查询登录的用户
mysqladmin -v -uroot -phybj2013ABC processlist
mysql -uroot -phybj2013ABC -e 'show processlist'

设置属性

#设置属性
set table_type=InnoDB

版本查询

#版本查询
 select version();
  status;
  \s;

####

(本篇博文完结;中文字数一共:3687字,英文字数一共:725 字)


扫扫加关注公众号 让我们一起学习一起成长

(转载本站文章请注明作者和出处 IT超仔

Post Directory