mysql部署.md 6.1 KB

MySQL部署

环境

  1. Ubuntu 18.04
  2. MySQL 8.0.16

安装MySQL

  1. 从官网下载mysql-apt-config.deb安装配置包

https://dev.mysql.com/downloads/repo/apt/

如: mysql-apt-config_0.8.13-1_all.deb

  1. 开始安装
   dpkg -i mysql-apt-config_0.8.13-1_all.deb

选择MySQL8,OK

   apt update
   apt install mysql-server

输入root密码,加密方式选择Legacy Authentication Method

  1. 验证安装是否成功
   service mysql status
   mysql -u root -p
  1. 查看mysql字符集
   mysql> show variables like '%char%';
  1. 设置 mysql 数据库表大小写不敏感

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 如果数据库已经初始化则已经不能通过修改配置文件使大小写不敏感了,只能清空数据库文件,然后修改配置文件,再初始化数据库,才能生效

  1. 清空数据库文件

      rm -r /var/lib/mysql
    
    1. 修改配置文件
      vi /etc/mysql/mysql.conf.d/mysqld.cnf
    

    末尾添加 lower_case_table_names=1

  2. 初始化数据库

      mysqld --initialize
      # 然后授权数据库数据给mysql用户
      chown -R mysql:mysql /var/lib/mysql
    
    1. 登陆数据库,修改root密码,临时密码在日志文件里面找 /var/log/mysql/error.log
      mysql -u root -p
      mysql>ALTER USER "root"@"localhost" IDENTIFIED  BY "XCH666xch!";
      # 生产数据库
      mysql>ALTER USER "root"@"%" IDENTIFIED  BY "XCH666xch_prod!";
    
  3. mysql数据库最大连接数修改

    1. 查看当前连接数
      mysql -uroot -pXCH666xch! -e 'show status' | grep -i  Threads
    

    Threads_running 2 表示当前连接数为2

    1. 查看最大连接数
      mysql -uroot -pXCH666xch! -e 'show variables' | grep max_connections
    
    1. 临时修改最大连接数,服务重启会失效
      mysql> set GLOBAL max_connections=300
    
    1. 永久修改
      vi /etc/mysql/mysql.conf.d/mysqld.cnf
      # 末尾添加 max_connections=500
      # 重启mysql服务
    
  4. mysql远程访问

   mysql> use mysql;
   mysql> select user,host from user;

看到root用户只允许localhost(即本地)访问,修改为 % ,%表示所有机器(临时处理)

   mysql> update user set host='%' where user='root';

重启mysql服务

   service mysql restart
  1. 排序配置

    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后,不能用双引号来引用字符串,因为它被解释为识别符

  1. 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
              ```
    
           2. 刷新flush-hosts,在数据库服务器执行以下命令
    
              ```shell
              /usr/bin/mysqladmin flush-hosts -h127.0.0.1 -uroot -p
              ```