xml地图|网站地图|网站标签 [设为首页] [加入收藏]
mysql连接工具与MyISAM表压缩工具,常见的错误及解
分类:数据库

图片 1

执行数据库查询时,有完整查询和模糊查询之分。
一般模糊语句格式如下:
SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件

一.mysql 连接工具  

  在mysq提供的工具中,DBA使用最频繁的莫过于mysql。这里的mysql是指连接数据库的客户端工具。

  1.1 连接选项

-u, -- user=name 指定用户名
-p ,--password[=name] 指定密码
-h ,--host=name 指定服务器IP或者域名
-p, --port=# 指定连接端口

在实际连接中命令如下:mysql -u 用户名 -p 密码
[root@hsr ~]#  mysql -u root -p

-- 完整的连接命令如下
[root@hsr ~]#  mysql -u root -p -h 172.168.18.201 -P 3306
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or g.

  1.2 执行选项
    通过 "-e,--execute=name 执行sql语句并退出" 此选项不需要连接到mysql数据库后再执行,对于一些批处理脚本很方便,下面是从客户端直接查询mysql数据库中user表的User和Host字段:

[root@hsr ~]#  mysql -u root -p  mysql -e "select User,Host from user"
Enter password: 

    图片 2
  连接多个sql 语句用英文分号隔开如   select User,Host from user; select xxx。

一、错误日志解析:

其中关于条件,SQL提供了四种匹配模式:

二. myisampack(MyISAM表压缩工具)

  myisampack是一个表压缩工具。在压缩之前需要确认mysqld已关闭或者要压缩的表不会有其他的sql操作;而且压缩过程会很占用cpu资源,建议在服务器空闲的状态进行。

  可以将数据文件压缩到40%-70%,当以后使用表时,解压缩列需要的信息被读入内存。当访问具体的记录时性能会更好,因为你只需要解压缩一个记录。压缩后的表也将成为一个只读表,不能进行DML操作。

--压缩前,查看test库中表的数据文件大小,其中有个a表是myisam类型, 将压缩MYD文件

    [root@hsr ~]# cd /usr/local/mysql/data

    [root@hsr data]# cd test
    [root@hsr test]# ls -ltr
    总用量 24
    -rw-r----- 1 mysql mysql   61 8月  24 16:43 db.opt
    -rw-r----- 1 mysql mysql 8566 8月  28 14:29 a.frm
    -rw-r----- 1 mysql mysql 1024 8月  28 14:32 a.MYI
    -rw-r----- 1 mysql mysql  456 8月  28 14:32 a.MYD

-- myisampack先到基地址里面找到该命令(用rpm安装可以在根目录下直接用该命令)
[root@hsr ~]# cd /usr/local/mysql/bin

图片 3

-- 压缩a表,提示太小无法压缩
[root@hsr bin]# ./myisampack /usr/local/mysql/data/test/a
/usr/local/mysql/data/test/a is too small to compress
如果压缩成功,该表就只能读,不能写。可以在查看MYD文件大小。

(1) 【ERROR】1452:无法在外键的表插入参考主键没有的数据

1、% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

 

例如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

 

再例如需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'

1452:无法在外键的表插入或更新参考主键没有的数据。由于item_discovery.itemid字段(外键)参考了items.itemid字段(主键),当要在item_discovery表插数据时,如果items表的主键没有对应的数据,则无法插入,报1452错误。此时可以检查参考的表的主键是否有主库对应的数据,如果有,则插入参考的表相应的数据,再开启复制恢复SQL线程。

再例如 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

 

备注:%三:表示左匹配。三%:表示右匹配。%三%:表示模糊查询。

(2) 【ERROR】1032:删除或更新数据,从库找不到记录

2、_ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

 

例如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”,这样u_name为三个字且中间一个字是“三”的;

 

再例如 SELECT * FROM [user] WHERE u_name LIKE '三__'
只找出“三脚猫”这样name为三个字且第一个字是“三”的;

 1032:删除或更新从库的数据,从库找不到记录。此时,主库的数据是比从库新的,可以采取从库添加相同的数据在开启复制恢复SQL线程。

3、[ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

 

例如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'
将找出“张三”、“李三”、“王三”(而不是“张李王三”);

(3) 【ERROR】1062:从库插入数据,发生唯一性冲突

再例如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
将找出“老1”、“老2”、……、“老9”;

 

如果要找“-”字符请将其放在首位:'张三[-1-9]';

 

Oracle 10g以上的版本用法为:

 1062:从库插入数据,发生唯一性冲突。此时从库已经有相同主键的数据,如果再插入相同主键值的数据则会报错。可以查看主库的改行数据与从库的要插入数据是否一致,如一致则跳过错误,恢复SQL线程,如不一致,则以主库为准,将从库的该行记录删除,再开启复制。

select * from flow_user where regexp_like(username, '[张王李]飞')

 

4、[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

如果当前高可用架构为Master-Master,则以下均在从库的操作都必须set sql_log_bin=0,避免从库执行的语句同步到主库(恢复时以主库的数据为准)。

例如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;
再例如 SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]'
将排除“老1”到“老4”,寻找“老5”、“老6”、……、“老9”。

二、怎么解决问题:

注:oracle like 不支持正则,你可以使用支持like的正则regexp_like

1.临时解决方案(业务运行期间不适宜使用数据对比和修复工具)

5、查询内容包含通配符时

 

* 表示查找的是所有信息,例如select * from tbl_user 

【ERROR】1452:

由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:
function sqlencode(str)
str=replace(str,"[","[[]") '此句一定要在最前
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function

 

备注
在查询前将待查字符串先经该函数处理即可,并且在网页上连接数据库用到这类的查询语句时侯要注意:
例如 Select * FROM user Where name LIKE '老[^1-4]'

 

上面 《'》老[^1-4]《'》是要有单引号的!

 

普通主从复制环境

 

从库:

 

 

主库:

查看主库在出错的相应位置的执行语句,可通过SQL得出当时insert或者update的对应的主键值。

 

 

查询item_discovery的外键约束c_item_discovery_1参考的表items对应主键值的数据行。

 

 

从库:

在items表插入主库查询出来的数据。

 

 

基于GTID复制环境

与普通主从复制环境处理方式相同。

 

【ERROR】1032:

 

 

 

发生1032可能是delete或者update时从库没有对应数据行,可以分两种情况处理:

 

本文由澳门新葡亰手机版发布于数据库,转载请注明出处:mysql连接工具与MyISAM表压缩工具,常见的错误及解

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文