mysql 忘记root密码解决办法

当前版本:mysql5.7

找到my.cnf 一般在/etc/my.cnf 或 macos /usr/local/etc/my.cnf

在[mysqld] 下加入以下语句:skip-grant-tables

执行mysql -uroot -p ,如果提示输入密码,按回车。然后登入mysql

修改密码

use mysql;
update user set password=PASSWORD('你的密码') where user='root';
###  5.7执行以下语句
### update user set authentication_string=PASSWORD('你的密码')  where user='root';
flush priveleges;

再修改my.cnf 将刚添加的语句去掉。成功!!

关于Mariadb启动报错Job for mariadb.service failed because the control process exited

MariaDB重启后,执行 systemctl start mariadb 启动报错

Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details.

根据官方提示执行 systemctl status mariadb.service 或者 journalctl -xe 并不能看出真正原因,此时可以查看mariadb的日志文件,查看错误原因。

cd /var/log/mariadb/

tail -n 100 mariadb.log

发现 Fatal error: cannot allocate memory for the buffer pool。

内存不够了

vim /etc/my.cnf将 innodb_buffer_pool_size = 专用的DB服务器,改为内存的50%,非专用改为内存的15-20%。

重启即可

mysql 实现首字母A-Z排序

两种方案:

  1. 语句
select * from user ORDER BY CONVERT(name USING GBK) ASC;

// 这样可以实现中文排序,但是有个问题,英文字母没有排序,而且在中文上边

2. 自定义函数

“`mysql

DELIMITER $$    
CREATE FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE V_RETURN VARCHAR(255);
DECLARE V_BOOL INT DEFAULT 0;
DECLARE FIRST_VARCHAR VARCHAR(1);
SET FIRST_VARCHAR = left(CONVERT(P_NAME USING gbk),1); SELECT FIRST_VARCHAR REGEXP '[a-zA-Z]' INTO V_BOOL;
IF V_BOOL = 1 THEN
SET V_RETURN = FIRST_VARCHAR;
ELSE
SET V_RETURN = ELT(INTERVAL(CONV(HEX(left(CONVERT(P_NAME USING gbk),1)),16,10),0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7, 0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6, 0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1), 'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z');
END IF;
RETURN V_RETURN;
END$$
DELIMITER;



select * from app_user ORDER BY fristPinyin(name) ASC ;
// 即可实现英文也按中文排序