官网:https://dev.mysql.com/doc/refman/8.0/en/

课程安排

第一天 第二天 第三天 第四天
初始MySQL 用户管理 部署环境规范 监控和性能瓶颈排查
MySQL安装 Binlog解析 部署生产MySQL(docker mysql) 慢日志设置及解析
存储引擎及目录结构 备份恢复 压力测试 执行计划详解
远程连接 存储引擎架构 主机优化&MySQL优化 高可用架构简介
数据类型 OOM的发生 MySQL索引
事务和锁

MySQL安装

  • 二进制安装:简单,方便,问题少,强烈建议
  • rpm安装:简单,通常版本较低,默认条件多,不建议
  • 源码编译:复杂,问题多,不建议

安装

官网二进制安装:https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html

1、卸载自带mysql/mariadb服务

  1. rpm -qa | grep mysql
  2. rpm -qa | grep mariadb
  3. rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

2、安装服务

  1. groupadd mysql
  2. useradd -r -g mysql -s /bin/false mysql
  3. tar xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar -C /usr/local/
  4. ln -s mysql-8.0.19-linux-glibc2.12-x86_64/ mysql
  5. mkdir mysql-files
  6. chown -R mysql:mysql mysql-8.0.19-linux-glibc2.12-x86_64/
  7. chown -R mysql:mysql /usr/local/mysql/
  8. chmod 750 /usr/local/mysql/mysql-files/
  9. # 初始化 - 注意密码,后边修改需要用到
  10. bin/mysqld --initialize --user=mysql
  11. bin/mysql_ssl_rsa_setup
  12. bin/mysqld_safe --user=mysql &

以下信息表示启动成功,查看端口

MySQL数据库 - 图1

3、修改密码

  1. mysql -uroot -p
  2. alter user 'root'@'localhost' identified by 'root@123';
  3. flush privileges;

MySQL数据库 - 图2

4、mysql启动方式

  1. # 自动启动 - centos6
  2. cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
  3. chkconfig --add mysqld
  4. # 修改mysqld中以下两行:
  5. basedir=/usr/local/mysql
  6. datadir=/data/mysql
  7. /etc/init.d/mysqld start
  8. # 手动启动
  9. bin/mysqld_safe --user=mysql &
  10. # 自定义配置文件的启动方式
  11. /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

目录结构

  1. bin # 二进制文件
  2. data # 数据目录
  3. include # 头文件目录
  4. lib #插件目录
  5. share
  6. support-files

常用命令

  1. # 建库、建表
  2. create database test;
  3. use test;
  4. create table t3 (id bigint primary key,name char(40));
  5. # 给表增加字段
  6. alter table t3 add colum info text;
  7. # 查看表结构
  8. desc t3;
  9. # 存储过程
  10. create procedure insertdata(in num int) begin declare i int;
  11. # 索引
  12. show index from t3\G;
  13. #
  14. select
  15. # 查看编码
  16. show variables like '%char%';
  17. # 字符集查询
  18. show character set;
  19. # undo回滚,撤销表空间查询
  20. mysqld --verbose --help | grep undo
  21. # 帮助
  22. help create table;
  23. # 关闭服务 - 安全关闭
  24. mysqladmin -p shutdown
  25. # 创建库时设置编码
  26. create database mydb default character set utf8;
  27. # 查看配置文件各段的参数(查看mysqld的参数)
  28. mysqld --verbose --help | more
  29. # mysql参数
  30. mysql --verbose --help | more
  31. # mysqldump、mysqld_safe等(不是很重要的)
  32. # 查看文件位置(pid文件位置)
  33. show variables like "%pid%";
  34. +---------------+---------------------------+
  35. | Variable_name | Value |
  36. +---------------+---------------------------+
  37. | pid_file | localhost.localdomain.pid |
  38. +---------------+---------------------------+
  39. 1 row in set (0.01 sec)
  40. # 查看用户,创建远程登录用户
  41. select user,host from mysql.user;
  42. create user root@'%' identified by 'root123.comCOM';
  43. create user root@'192.168.%.%' identified by 'root123.comCOM';
  44. create user root@'%' identified by 'root@123';
  45. # medium
  46. show variables like '%policy%';
  47. # 查看服务连接进程列表
  48. show processlist;
  49. # 查询sql模式 - 配置文件中配置,sql查询相关

修改密码:

  1. # 一
  2. mysql -uroot -p
  3. update mysql.user set password = PASSWORD('new_password') where user = 'root';
  4. flush privileges;
  5. # 二
  6. mysqladmin -uroot password "new_password" -p;
  7. mysqladmin -u root -h host_name password "new_password" -p;

关闭远程连接

  1. use mysql;
  2. update user set host = "localhost" where user = "root" and host = "%";
  3. flush privileges;
  4. 这几句SQL的解释如下:
  5. 1 切换到mysql数据库(这是MySQL自带的一个数据库,里面存放着一些root的配置信息);
  6. 2 修改root用户的host属性,确保其为localhost,这表示只能本地访问(%表示可以远程访问);
  7. 3 刷新。

创建库和表中,会在mysql/data下创建对应的目录,里面存放这表文件

mysql配置文件基本参数

  1. [mysqld_safe]
  2. user = mysql
  3. [client]
  4. # 指定套接字的位置
  5. socket = /usr/local/mysql/data/mysql.sock
  6. port = 3406
  7. default-character-set = utf8mb4
  8. [mysqld]
  9. character_set_server = utf8mb4
  10. collation_server = utf8mb4_unicode_ci
  11. port = 3306
  12. transaction_isolation = READ-COMMITTED
  13. open_files_limit = 65535
  14. max_connections =3000
  15. max_user_connections =2000
  16. Default-time_zone = '+8:00'
  17. query_cache_size = 0
  18. query_cache_type = 0
  19. lock_wait_timeout = 300
  20. max_connect_errors = 1000000
  21. sort_buffer_size = 10M
  22. sql_mode = STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY,STRICT_ALL_TABLES
  23. long_query_time = 1 #1秒慢日志
  24. slow_query_log = ON
  25. binlog_format = ROW
  26. binlog_rows_query_log_events = ON
  27. enforce_gtid_consistency = ON
  28. gtid_mode = ON
  29. log_slave_updates = ON
  30. server_id = 3299865575
  31. innodb_flush_method = O_DIRECT
  32. innodb_buffer_pool_size = 12408M
  33. innodb_log_file_size = 2G
  34. innodb_log_files_in_group = 2
  35. innodb_flush_log_at_trx_commit = 1
  36. innodb_lru_scan_depth = 256
  37. basedir = /mysql/base5725
  38. datadir = /mysqldata/my{port}/data
  39. tmpdir = /mysql/tmp
  40. socket = /mysql/my{port}/mysql.sock
  41. pid_file = /mysql/my{port}/mysql.pid
  42. innodb_data_home_dir = /mysqldata/my{port}/data
  43. log_error = /mysql/my{port}/log/error.log
  44. general_log_file = /mysql/my{port}/log/general.log
  45. slow_query_log_file = /mysql/my{port}/log/slow.log
  46. log_bin = /mysqldata/my{port}/log/mysql-bin
  47. log_bin_index = /mysqldata/my{port}/log/mysql-bin.index
  48. relay_log = /mysqldata/my{port}/log/relay-log
  49. relay_log_index = /mysqldata/my{port}/log/relay-log.index
  50. long_query_time = 1 #1秒慢日志
  51. slow_query_log = ON
  52. binlog_format = ROW
  53. binlog_rows_query_log_events = ON
  54. enforce_gtid_consistency = ON
  55. gtid_mode = ON
  56. log_slave_updates = ON
  57. server_id = 3299865575
  58. [mysql]
  59. [mysqldump]

问题处理

开启root远程登录,后关闭