简介
此篇主要介绍在平常工作中的有关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’)
原因 : like使用了双引好
参考链接 :
解决 : 将like字段修改为单引号
mysql初始化权限错误
问题 :
原因 : 网上说都是目录权限的问题,但是我感觉还有系统有关,具体原因还未深究,碰到的机率比较小(此种情况碰到过四五次每次都很头疼,总结下自己的几种解决方式)
参考链接 :
解决 :
-
方式一 :
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
-
方式四:
就是修改目录权限之类的,一般当时有时候可以解决,但是之后会碰到种种问题,不建议,
找不到/tmp/mysql.**
问题 :
原因 : 由于我在my.cnf中修改了sock的位置,所以默认从/tmp中无法找到mysql.sock报错.
参考链接 :
解决 :
添加 -S 参数指定sock位置
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;
####