https://dev.mysql.com/downloads/repo/apt/
如: mysql-apt-config_0.8.13-1_all.deb
dpkg -i mysql-apt-config_0.8.13-1_all.deb
选择MySQL8,OK
apt update
apt install mysql-server
输入root密码,加密方式选择Legacy Authentication Method
service mysql status
mysql -u root -p
mysql> show variables like '%char%';
mysql 在Windows下不区分大小写,但是在Linux下默认是区分大小写的
查看当前配置(区分大小写)
mysql> show variables like '%case%';
Variable_name | Value | 说明 |
---|---|---|
lower_case_file_system | OFF | 表示当前系统文件是否大小写敏感,只读参数,无法修改 |
lower_case_table_names | 0 | 表示表名是否大小写敏感,可以修改。lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作。 |
mysql8 如果数据库已经初始化则已经不能通过修改配置文件使大小写不敏感了,只能清空数据库文件,然后修改配置文件,再初始化数据库,才能生效
清空数据库文件
rm -r /var/lib/mysql
vi /etc/mysql/mysql.conf.d/mysqld.cnf
末尾添加 lower_case_table_names=1
初始化数据库
mysqld --initialize
# 然后授权数据库数据给mysql用户
chown -R mysql:mysql /var/lib/mysql
mysql -u root -p
mysql>ALTER USER "root"@"localhost" IDENTIFIED BY "XCH666xch!";
# 生产数据库
mysql>ALTER USER "root"@"%" IDENTIFIED BY "XCH666xch_prod!";
mysql数据库最大连接数修改
mysql -uroot -pXCH666xch! -e 'show status' | grep -i Threads
Threads_running 2 表示当前连接数为2
mysql -uroot -pXCH666xch! -e 'show variables' | grep max_connections
mysql> set GLOBAL max_connections=300
vi /etc/mysql/mysql.conf.d/mysqld.cnf
# 末尾添加 max_connections=500
# 重启mysql服务
mysql远程访问
mysql> use mysql;
mysql> select user,host from user;
看到root用户只允许localhost(即本地)访问,修改为 % ,%表示所有机器(临时处理)
mysql> update user set host='%' where user='root';
重启mysql服务
service mysql restart
排序配置
select @@sql_mode;
# 原来的值
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
# 更改为
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
# 修改配置文件
/etc/mysql/conf.d/mysql.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
分别在[mysqld]、[mysql]下加入
sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
# 发现好像只能在[mysqld]下加入
ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
NO_AUTO_VALUE_ON_ZERO: 该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
STRICT_TRANS_TABLES: 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制 NO_ZERO_IN_DATE: 在严格模式下,不允许日期和月份为零
NO_ZERO_DATE: 设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
ERROR_FOR_DIVISION_BY_ZERO: 在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL
NO_AUTO_CREATE_USER: 禁止GRANT创建密码为空的用户
NO_ENGINE_SUBSTITUTION: 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
PIPES_AS_CONCAT: 将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
ANSI_QUOTES: 启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
mysql错误处理
1. msyql 1129 错误 Host is blocked because of many connection errors; unblock with 'mysqladmin flush-host
原因:同一个IP连接失败次数超过了最大的max_connection_errors=10;就会阻止连接
处理:
1. 修改/etc/mysql/mysql.conf.d/mysqld.cnf 文件,添加以下内容
```properties
max_connect_errors=300
wait_timeout=30
```
2. 刷新flush-hosts,在数据库服务器执行以下命令
```shell
/usr/bin/mysqladmin flush-hosts -h127.0.0.1 -uroot -p
```