标签归档:mysql

mysql 5.7 无法使用 group by 的解决办法

出错的提示可能是这样的

[Err] 1055 – Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决办法

1、查看 sql_mode

select @@global.sql_mode;

2、查出来的值

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

3、去掉 ONLY_FULL_GROUP_BY ,重新设置值

set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

4、修改 my.cnf ,添加以下行

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;

设置的值和第3步的值一样,该操作要重启 mysql 服务。

MySQL 读写分离的主从数据库配置

准备两台服务器,都安装 mysql 服务器。主服务器称为 master, 从服务器称为 slave 。前提要设置好防火墙,保证网络通畅。

master 配置

配置 my.cnf

[mysqld]
#bind-address = 127.0.0.1    注释掉

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
relay_log = /var/log/mysql/mysql-relay-bin.log

继续阅读

centos7 安装 mysql

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
yum localinstall mysql57-community-release-el7-8.noarch.rpm
mysql-community-server

可以修改 /etc/yum.repos.d/mysql-community.repo 源,改变默认安装的mysql版本。比如要安装5.6版本,将5.7源的 enabled=1 改成 enabled=0 。然后再将5.6源的 enabled=0 改成 enabled=1 即可。

CentOS 7下yum安装MariaDB

CentOS 7下mysql下替换成MariaDB了。

把以下内容放到 /etc/yum.repos.d/MariaDB.repo 文件中

# MariaDB 10.4 CentOS repository list - created 2019-11-27 06:40 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

更多发行版:https://downloads.mariadb.org/mariadb/repositories/

安装

yum install mariadb mariadb-server
systemctl start mariadb   #启动mariadb
systemctl enable mariadb  #设置开机自启动
mysql_secure_installation #设置root密码等相关
mysql -uroot -p           #测试登录

phpmyadmin.pma_table_uiprefs doesn’t exist

在使用 phpmyadmin 管理 mysql 时,出现 phpmyadmin.pma_table_uiprefs doesn't exist ,快速解决办法如下:

  1. On the shell: locate create_tables.sql.
  2. import /usr/share/doc/phpmyadmin/examples/create_tables.sql.gz using phpMyAdmin.
  3. open /etc/phpmyadmin/config.inc.php and edit lines 81-92: change pma_bookmark to pma__bookmark and so on.

Mysql彻底卸载重装

sudo apt-get purge mysql*
sudo apt-get autoremove
sudo apt-get autoclean
sudo rm -rf /var/log/mysql
sudo rm -rf /var/log/mysql.*
sudo rm -rf /var/lib/mysql
sudo apt-get install mysql-server --fix-missing --fix-broken

mysql 创建新数据库并添加用户授权

创建数据库

CREATE DATABASE IF NOT EXISTS `itop` DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

创建用户,并:

  • 创建与用户同名的数据库并授予所有权限。
  • 给以 用户名_ 开头的数据库 (username_%) 授予所有权限。
-- 把 itop 改为对应的用户名

CREATE USER `itop`@`%` IDENTIFIED WITH mysql_native_password USING password('sddt8888');
GRANT ALL PRIVILEGES ON `itop`.* TO 'itop'@'%';
GRANT ALL PRIVILEGES ON `itop\_%`.* TO 'itop'@'%';
FLUSH PRIVILEGES;

创建只读用户

CREATE USER `itop`@`%` IDENTIFIED WITH mysql_native_password USING password('sddt8888');
GRANT Select ON `itop`.* TO `itop`@`%`;
FLUSH PRIVILEGES;

删除用户

DROP USER `itop`@`%`;
FLUSH PRIVILEGES;

mysql全局修改sql_mode

  1. mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等。可以通过以下方式查看当前数据库使用的 sql_mode:
show variables like 'sql_mode';

5.7.22 版本中,结果是 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

  1. session 修改
set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
  1. 全局修改。打开 mysql.cnf ,在 [mysqld] 下面添加:
sql_mode=