官网: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服务
rpm -qa | grep mysql
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
2、安装服务
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
tar xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar -C /usr/local/
ln -s mysql-8.0.19-linux-glibc2.12-x86_64/ mysql
mkdir mysql-files
chown -R mysql:mysql mysql-8.0.19-linux-glibc2.12-x86_64/
chown -R mysql:mysql /usr/local/mysql/
chmod 750 /usr/local/mysql/mysql-files/
# 初始化 - 注意密码,后边修改需要用到
bin/mysqld --initialize --user=mysql
bin/mysql_ssl_rsa_setup
bin/mysqld_safe --user=mysql &
以下信息表示启动成功,查看端口
3、修改密码
mysql -uroot -p
alter user 'root'@'localhost' identified by 'root@123';
flush privileges;
4、mysql启动方式
# 自动启动 - centos6
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
# 修改mysqld中以下两行:
basedir=/usr/local/mysql
datadir=/data/mysql
/etc/init.d/mysqld start
# 手动启动
bin/mysqld_safe --user=mysql &
# 自定义配置文件的启动方式
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
目录结构
bin # 二进制文件
data # 数据目录
include # 头文件目录
lib #插件目录
share
support-files
常用命令
# 建库、建表
create database test;
use test;
create table t3 (id bigint primary key,name char(40));
# 给表增加字段
alter table t3 add colum info text;
# 查看表结构
desc t3;
# 存储过程
create procedure insertdata(in num int) begin declare i int;
# 索引
show index from t3\G;
#
select
# 查看编码
show variables like '%char%';
# 字符集查询
show character set;
# undo回滚,撤销表空间查询
mysqld --verbose --help | grep undo
# 帮助
help create table;
# 关闭服务 - 安全关闭
mysqladmin -p shutdown
# 创建库时设置编码
create database mydb default character set utf8;
# 查看配置文件各段的参数(查看mysqld的参数)
mysqld --verbose --help | more
# mysql参数
mysql --verbose --help | more
# mysqldump、mysqld_safe等(不是很重要的)
# 查看文件位置(pid文件位置)
show variables like "%pid%";
+---------------+---------------------------+
| Variable_name | Value |
+---------------+---------------------------+
| pid_file | localhost.localdomain.pid |
+---------------+---------------------------+
1 row in set (0.01 sec)
# 查看用户,创建远程登录用户
select user,host from mysql.user;
create user root@'%' identified by 'root123.comCOM';
create user root@'192.168.%.%' identified by 'root123.comCOM';
create user root@'%' identified by 'root@123';
# medium
show variables like '%policy%';
# 查看服务连接进程列表
show processlist;
# 查询sql模式 - 配置文件中配置,sql查询相关
修改密码:
# 一
mysql -uroot -p
update mysql.user set password = PASSWORD('new_password') where user = 'root';
flush privileges;
# 二
mysqladmin -uroot password "new_password" -p;
mysqladmin -u root -h host_name password "new_password" -p;
关闭远程连接
use mysql;
update user set host = "localhost" where user = "root" and host = "%";
flush privileges;
这几句SQL的解释如下:
1, 切换到mysql数据库(这是MySQL自带的一个数据库,里面存放着一些root的配置信息);
2, 修改root用户的host属性,确保其为localhost,这表示只能本地访问(%表示可以远程访问);
3, 刷新。
创建库和表中,会在mysql/data下创建对应的目录,里面存放这表文件
mysql配置文件基本参数
[mysqld_safe]
user = mysql
[client]
# 指定套接字的位置
socket = /usr/local/mysql/data/mysql.sock
port = 3406
default-character-set = utf8mb4
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
port = 3306
transaction_isolation = READ-COMMITTED
open_files_limit = 65535
max_connections =3000
max_user_connections =2000
Default-time_zone = '+8:00'
query_cache_size = 0
query_cache_type = 0
lock_wait_timeout = 300
max_connect_errors = 1000000
sort_buffer_size = 10M
sql_mode = STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY,STRICT_ALL_TABLES
long_query_time = 1 #1秒慢日志
slow_query_log = ON
binlog_format = ROW
binlog_rows_query_log_events = ON
enforce_gtid_consistency = ON
gtid_mode = ON
log_slave_updates = ON
server_id = 3299865575
innodb_flush_method = O_DIRECT
innodb_buffer_pool_size = 12408M
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 1
innodb_lru_scan_depth = 256
basedir = /mysql/base5725
datadir = /mysqldata/my{port}/data
tmpdir = /mysql/tmp
socket = /mysql/my{port}/mysql.sock
pid_file = /mysql/my{port}/mysql.pid
innodb_data_home_dir = /mysqldata/my{port}/data
log_error = /mysql/my{port}/log/error.log
general_log_file = /mysql/my{port}/log/general.log
slow_query_log_file = /mysql/my{port}/log/slow.log
log_bin = /mysqldata/my{port}/log/mysql-bin
log_bin_index = /mysqldata/my{port}/log/mysql-bin.index
relay_log = /mysqldata/my{port}/log/relay-log
relay_log_index = /mysqldata/my{port}/log/relay-log.index
long_query_time = 1 #1秒慢日志
slow_query_log = ON
binlog_format = ROW
binlog_rows_query_log_events = ON
enforce_gtid_consistency = ON
gtid_mode = ON
log_slave_updates = ON
server_id = 3299865575
[mysql]
[mysqldump]