解决Error(1133): Can’t find any matching row in the user table

刚刚尝试使用同步文件法把整个mysql的数据文件传送到另外一台服务器做双机备份。

转移完成后通过命令行形式用root账户连接上mysql查看了一下,所有数据完好,用户数据也转移过来了。

但是当我把网站数据也导入该服务器之后,所有需要访问mysql数据库的网站全部出现了无法连接的错误,症状就如同密码错误一样。

使用phpmyadmin进入mysql查看,在权限页面也可以正常看到所有的mysql账户,在mysql.user表中所有的数据也很正常。

然后我尝试了一下修改导入的账户的密码,使用了


1
SET PASSWORD FOR ‘username’@‘localhost’ = PASSWORD( ‘****’ )

的方法,收到了以下错误提示

Error (1133): Can’t find any matching row in the user table

经过在网上各种查询之后,找到的最简单的办法就是在mysql命令行中执行set FLUSH

PRIVILEGES
;
这一语句即可。

发生这一错误的原因是在变更了mysql.user表之后,没有使用FLUSH PRIVILEGES命令来更新权限表(grant tables)


关注公众号,了解更多it技术(it问答网

设置服务器的MySQL允许远程访问/外网访问

进入mysql:

mysql -uroot -p

输入密码。

选择mysql数据库:

use mysql;

增加允许远程访问的用户或者允许现有用户的远程访问。
给root授予在任意主机(%)访问任意数据库的所有权限。

update user set host='%' where user='root' and host='localhost';

退出mysql:

exit

重启数据库:

[root@localhost ~]# service mysqld restart

关注公众号,了解更多it技术(it问答网

sql中的正则

//REGEXP 是sql中的正则。

select * from infos where tuijian REGEXP ‘[1]’;

SELECT * FROM infos WHERE CONCAT(“,”,tuijian,”,”) REGEXP “,[13],”;//检索1或者3的
SELECT * FROM infos WHERE CONCAT(“,”,tuijian,”,”) REGEXP “,(13),”;//检索13的。

//检索,1,3或者13的。
SELECT * FROM infos WHERE CONCAT(“,”,tuijian,”,”) REGEXP “,[13],” or CONCAT(“,”,tuijian,”,”) REGEXP “,(13),”
SELECT * FROM infos WHERE CONCAT(“,”,tuijian,”,”) REGEXP “,(13)|[13],”


关注公众号,了解更多it技术(it问答网

mysql数据库备份-主从分离

mysql数据库备份-主从分离

原理:主从分离 【一般都是在同一机房中进行】

实现步骤:
1、确保主服务器打开二进制日志功能;
这样,主服务器一旦有数据变化,立即产生二进制日志;

2、从服务器也需要开启二进制日志和relay日志功能。
这样可以从主服务器读取binlog并产生relaylog

3、在主服务器建立一个从服务器账号,并授予读binlog的权限。

4、指定从服务对应的主服务器,开启从服务器。

主:
binlog-format=row/statement

statement:2进制记录执行语句,如update
row: 2进制记录的是磁盘变化;
mixed: 混合的,由系统根据语句,来决定。

update table set aa=xx where id=3 ;//语句长而磁盘变化少,建议row
update table set aa=xx;//语句短,但是影响上万行,磁盘变化大,易用
statement。

若想让系统自动帮我们识别,则建议用mixed,混合的,由系统根据语句来决定。

主服务器
mysql配置文件如下;

#给服务器起一个独特的id
server-id=201

#声明2进制日志的文件为mysql-bin.xxxx
log-bin=mysql-bin

#二进制日志的格式 mixed/row/statement
binlog-format=mixed

 

查看是否能充当主服务器:
show master status;

=========================================
从服务器mysql配置如下:
#给服务器起一个独特的id
server-id=202

#声明2进制日志的文件为mysql-bin.xxxx
log-bin=mysql-bin
#建议从服务器开启二进制日志,因为从服务器主要就是起到备份的功能。
#二进制可以看成最后的数据恢复方案。

#二进制日志的格式
relay-log=mysql-relay

 

查看是否能充当从服务器:
show slave status;

主服务器操作::

mysql>use mysql;

mysql>select host,user,password from user;

核心操作:
第一步:
mysql>use mysql;

第二步:
mysql>grant replication client,replication slave on *.* to
repl@’192.168.1.%’ identified by ‘repl’;

第三步:
mysql>flush privileges;

从服务器操作::

核心操作:

第一步:
mysql>use mysql;

第二步:
mysql>

change master to
master_host=’192.168.1.107′,
master_user=’repl’,
master_password=’repl’,
master_log_file=’mysql-bin.000001′,
master_log_pos=107;

第三步:
我们执行后看可打通呢?
mysql>show slave status;

第四步 启动从服务器功能:
mysql>start slave;

 

徐多蔚 xuduowei 徐老师 合肥php老师


关注公众号,了解更多it技术(it问答网

mysql二进制日志的开启及使用

怎么开启?

MySQL\my.ini
中,在mysqld结构中加入:log_bin=mysqlxdw
提示:mysqlxdw是文件名,可自己任意定义。
[mysqld]
port=3306
basedir=”E:/phpStudy/MySQL/”
datadir=”E:/phpStudy/MySQL/data/”
character-set-server=utf8
default-storage-engine=MyISAM

log_bin=mysqlxdw

 

是否启用了日志

mysql>show variables like 'log_bin';

 

怎样知道当前的日志
mysql> show master status;

mysql> show binlog events;

SHOW BINLOG EVENTS IN ‘mysqlxdw.000002’;

项目调试,二进制查看

show binlog events;#显示二进制日志
PURGE MASTER LOGS TO 'mysqlxdw.000001'; #清除主日志
flush logs;#刷新日志
reset master;#复位主日志

show binlog events;
PURGE MASTER LOGS TO 'mysqlxdw.000001';
flush logs;
reset master;

 

 

徐多蔚  徐老师 xuduowei  合肥php老师


关注公众号,了解更多it技术(it问答网

MySql模糊查询like通配符使用

MySql的like语句中的通配符:百分号、下划线和escape

 

%:表示任意个或多个字符。可匹配任意类型和长度的字符。

Sql代码

select * from user where username like '%huxiao';   
select * from user where username like 'huxiao%';   
select * from user where username like '%huxiao%';   

另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件

SELECT * FROMuserWHERE u_name LIKE ‘%三%’ AND u_name LIKE ‘%猫%’

若使用

SELECT * FROMuserWHERE u_name LIKE ‘%三%猫%’

虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)

Sql代码

select * from user where username like '_';   
select * from user where username like 'huxia_';   
select * from user where username like 'h_xiao';   

 

escape: 如果我就真的要查%或者_,怎么办呢?使用escape,转义字符后面的%或_就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用

Sql代码

select username from gg_user where username like '%xiao/_%' escape '/';    
select username from gg_user where username like '%xiao/%%' escape '/';

关注公众号,了解更多it技术(it问答网

MySQL之CONCAT()的用法

mysql CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一,下面就将为您详细介绍mysql CONCAT()函数,供您参考

mysql CONCAT(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)

mysql> SELECT CONCAT(’My’, ‘S’, ‘QL’);

-> ‘MySQL’

mysql> SELECT CONCAT(’My’, NULL, ‘QL’);

-> NULL

mysql> SELECT CONCAT(14.3);

-> ‘14.3′

 

mysql CONCAT_WS(separator,str1,str2,…)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。   第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

mysql> SELECT CONCAT_WS(’,’,’First name’,’Second name’,’Last Name’);

-> ‘First name,Second name,Last Name’

mysql> SELECT CONCAT_WS(’,’,’First name’,NULL,’Last Name’);

-> ‘First name,Last Name’

mysql CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。


关注公众号,了解更多it技术(it问答网

SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉汇总

1.

a. 并集UNION
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2
提示:

union与union all

union :自动去除重复的数据,然后合并结果集

union all :不去除重复的数据,直接合并结果集

b. 交集JOIN
SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.name
c. 差集NOT IN
SELECT * FROM table1 WHERE name NOT IN(SELECT name FROM table2)
d. 笛卡尔积
SELECT * FROM table1 CROSS JOIN table2
SELECT * FROM table1,table2相同
2. SQL中的UNION
UNION与UNION ALL的区别是,前者会去除重复的条目,后者会仍旧保留。
a. UNION
SQL Statement1
UNION
SQL Statement2
b. UNION ALL
SQL Statement1
UNION ALL
SQL Statement2
3. SQL中的各种JOIN
SQL中的连接可以分为内连接,外连接,以及交叉连接
(即是笛卡尔积)
a. 交叉连接CROSS JOIN
如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;
举例
SELECT * FROM table1 CROSS JOIN table2
等同于
SELECT * FROM table1,table2
一般不建议使用该方法,因为如果有WHERE子句的话,往往会先生成两个表行数乘积的行的数据表然后才根据WHERE条件从中选择。
因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。
b. 内连接INNER JOIN
如果仅仅使用
SELECT * FROM table1 INNER JOIN table2
没有指定连接条件的话,和交叉连接的结果一样。
但是通常情况下,使用INNER JOIN需要指定连接条件。
— 等值连接(=号应用于连接条件, 不会去除重复的列)
SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column
— 不等连接(>,>=,<,<=,!>,!<,<>)
例如
SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column<>b.column
— 自然连接(会去除重复的列)
c. 外连接OUTER JOIN
首先内连接和外连接的不同之处:
内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样,但是不同于笛卡尔积的地方是,没有笛卡尔积那么复杂要先生成行数乘积的数据表,内连接的效率要高于笛卡尔积的交叉连接。
指定条件的内连接,仅仅返回符合连接条件的条目。
外连接则不同,返回的结果不仅包含符合连接条件的行,而且包括左表(左外连接时), 右表(右连接时)或者两边连接(全外连接时)的所有数据行。
1)左外连接LEFT [OUTER] JOIN
显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL
例如
SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column
2)右外连接RIGHT [OUTER] JOIN
显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL
例如
SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column
3)全外连接
显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL

关注公众号,了解更多it技术(it问答网

union和left join的应用区别

union为增加行;left join为增加列

1. union

union关联两张表时,增加行,两张表的字段必须相同。(增加表数据的条数)

例: 表A ( 列  a b c) 共6行数据;表B(列 a b c)共4行数据;

select  * from  A        union       select *  from B      : 查询结果为表C  :为 a b c 3列,后共6+4=10行;

2. left join

left join关联两张表时,增加列,两张表必须有相关联的字段。(增加表数据的列数)

例: 表A ( 列  a b c ) 共4行数据;表B(列  b d e f g)共6行数据;

select  * from A  left join B  on A.b = B.b        :  查询结果为表C  :为 a  b  c  b1 d  e  f  g 共 8列,共4行(表A的行数)


关注公众号,了解更多it技术(it问答网

计算两个字符串的相似度mysql 自定义函数:Levenshtein_mysql

1、功能描述:

mysql 自定义函数。用来计算字符A转换成字符串B所花费的代价,数值越小,代价越低。(换句话来说,就计算两个字符串的相似度,值越小相似度越高)。

该实现采用了编辑距离算法,详见:http://baike.baidu.com/link?url=EhmqDIoInSurOWI8VfR5bdmwxuYjPGKgqET2oNyv9–zDREhTUe5sYdxWLxS4v3tdK1PJVOFaOy9c6uHoElBSK

2、使用方法:

使用源代码的话,从第1步开始。如果是直接使用二进制发布包的话,直接从第4步开始即可。

1)下载本代码

2)安装mysql开发包。

mysql主分支文件名类型:libmysqlclient15-dev mariaDB分支文件类似:MariaDB-10.0.21-centos7-x86_64-devel

3)编译源代码:

g++ -shared -fPIC -I /usr/include/mysql -o lev_distance.so lev_distance.cpp

4)将so文件复制到mysql插件目录

cp lev_distance.so /usr/lib64/mysql/plugin

5)创建mysql自义函数。

CREATE FUNCTION levenshtein RETURNS INTEGER SONAME ‘lev_distance.so’;

6)完成。

7)测试:

SELECT levenshtein(‘abc’,’dbca’)

项目主页:http://www.open-open.com/lib/view/home/1440302113917

文章来源:http://www.genshuixue.com/i-cxy/p/11592035

 


关注公众号,了解更多it技术(it问答网