This commit is contained in:
2021-11-14 15:50:55 +08:00
parent f810ebf1d9
commit 915c231124
27 changed files with 1862 additions and 1890 deletions

View File

@@ -7,78 +7,80 @@ categories: ["database"]
---
# MySQL 5.7 配置文件 my.cnf
```
[mysqld]
datadir = /db/mysql
socket = /var/lib/mysql/mysql.sock
symbolic-links = 0
log-timestamps = SYSTEM
slow-query-log = 1
slow-query-log-file = /var/log/mysqld/slow.log
long-query-time = 8
#log-queries-not-using-indexes = 1
log-error = /var/log/mysqld/error.log
pid-file = /var/run/mysqld/mysqld.pid
max-connections = 1000
max-connect-errors = 1000
max-user-connections = 600
interactive-timeout = 3600
wait-timeout = 3600
skip-name-resolve = 1
lower-case-table-names = 1
default-time-zone = '+08:00'
character-set-server = utf8mb4
sql-mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
bind-address = 0.0.0.0
table-open-cache = 2048
default-storage-engine = innodb
innodb-autoinc-lock-mode = 2
innodb-flush-log-at-trx-commit = 0
# 建议物理内存一半
innodb-buffer-pool-size = 8G
innodb-buffer-pool-instances = 8
max-allowed-packet = 512M
query-cache-size = 0
query-cache-type = 0
# 建议点分 ip 的最后一个数字
server-id = 123
# bin log
#binlog-format = ROW
#log-bin = /var/lib/mysql/mysql-bin
#expire-logs-days = 3
# relay log
#read-only = 1
#replicate-wild-do-table = db1.%
#relay-log = /var/lib/mysql/mysql-relay-bin
#slave-parallel-type = logical-clock
```
```
[mysqld]
datadir = /db/mysql
socket = /var/lib/mysql/mysql.sock
symbolic-links = 0
log-timestamps = SYSTEM
slow-query-log = 1
slow-query-log-file = /var/log/mysqld/slow.log
long-query-time = 8
#log-queries-not-using-indexes = 1
log-error = /var/log/mysqld/error.log
pid-file = /var/run/mysqld/mysqld.pid
max-connections = 1000
max-connect-errors = 1000
max-user-connections = 600
interactive-timeout = 3600
wait-timeout = 3600
skip-name-resolve = 1
lower-case-table-names = 1
default-time-zone = '+08:00'
character-set-server = utf8mb4
sql-mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
bind-address = 0.0.0.0
table-open-cache = 2048
default-storage-engine = innodb
innodb-autoinc-lock-mode = 2
innodb-flush-log-at-trx-commit = 0
# 建议物理内存一半
innodb-buffer-pool-size = 8G
innodb-buffer-pool-instances = 8
max-allowed-packet = 512M
query-cache-size = 0
query-cache-type = 0
# 建议点分 ip 的最后一个数字
server-id = 123
# bin log
#binlog-format = ROW
#log-bin = /var/lib/mysql/mysql-bin
#expire-logs-days = 3
# relay log
#read-only = 1
#replicate-wild-do-table = db1.%
#relay-log = /var/lib/mysql/mysql-relay-bin
#slave-parallel-type = logical-clock
```
# 复制表结构
```sql
create table db1.t1 like db2.t2;
create table db1.t1 select db2.t2 where 1=2;
```
```sql
create table db1.t1 like db2.t2;
create table db1.t1 select db2.t2 where 1=2;
```
# 复制表结构及其数据
```sql
create table db1.t1 select db2.t2 [where ...]
```
```sql
create table db1.t1 select db2.t2 [where ...]
```
# 复制表数据
```
insert into db2.t2(column1, column2 ...)
select column1, column2 ... from db1.t1 [where ...]
```
```
insert into db2.t2(column1, column2 ...)
select column1, column2 ... from db1.t1 [where ...]
```
# 通过复制表文件来复制表数据
- 在db2中创建同结构表
```sql
create table db2.t1 like db1.t1;
```
- 丢弃表空间
```sql
alter table db2.t1 discard tablespace;
```
- 复制 t1 的表数据文件
```bash
#关闭数据库
@@ -89,51 +91,52 @@ insert into db2.t2(column1, column2 ...)
#启动数据库
systemctl start mysqld
```
- 导入表空间
```sql
alter table db2.t1 import tablespace;
```
# 设置一个表的空列自增
```sql
-- 删除可能存在的主键
alter table 表名 drop primary key;
alter table 表名 modify 列名 auto_increment primary key;
```
```sql
-- 删除可能存在的主键
alter table 表名 drop primary key;
alter table 表名 modify 列名 auto_increment primary key;
```
# 查看数据库中每个表的全部列名
```sql
select table_name, column_name from
information_schema.columns
where table_schema = '数据库名';
```
```sql
select table_name, column_name from
information_schema.columns
where table_schema = '数据库名';
```
# 查看数据库中每个表的行数
```sql
select table_name, table_rows
from information_schema.tables
where table_schema = '数据库名';
```
```sql
select table_name, table_rows
from information_schema.tables
where table_schema = '数据库名';
```
# 查看数据库中每个表的索引
```sql
select table_name, column_name, index_name
from INFORMATION_SCHEMA.STATISTICS
where table_schema = '数据库名';
```
```sql
select table_name, column_name, index_name
from INFORMATION_SCHEMA.STATISTICS
where table_schema = '数据库名';
```
# 表的部分列数据到另一个表
```sql
update db2.t2(column1, column2 ...) = (
select column1, column2 from db1.t1
where db1.t1.id = db2.t2.id);
```
```sql
update db2.t2(column1, column2 ...) = (
select column1, column2 from db1.t1
where db1.t1.id = db2.t2.id);
```
# 把语句执行结果写到文件
```bash
mysql -uroot -p -hsever_ip -Ddb_name
-Ne "select ... from table_name;" > file_name
```
```bash
mysql -uroot -p -hsever_ip -Ddb_name
-Ne "select ... from table_name;" > file_name
```
# 表分区
- 查看表的分区情况
@@ -142,27 +145,32 @@ mysql -uroot -p -hsever_ip -Ddb_name
from information_schema.partitions
where table_name = 'table_name';
```
- 建表时指定
```sql
create table table_name(...)
partition by range columns(column_name)
(partition part_name values less than(some_value));
```
- 修改成分区表
```sql
alter table table_name
partition by range(column_name)
(partition part_name values less than(som_value));
```
- 增加分区
```sql
alter table table_name add partition
(partition part_name values less than(som_value));
```
- 删除分区
```sql
alter table table_name drop partition part_name;
```
- 合并/拆分分区
```sql
alter table table_name
@@ -170,26 +178,31 @@ mysql -uroot -p -hsever_ip -Ddb_name
(partition part_new_1 values less than(value_1),
partition part_new_2 values less than(value_2));
```
- 重建分区,整理分区碎片
```sql
alter table table_name
rebuild partition part_name_1, part_name_2;
```
- 优化分区,回收空间,整理碎片
```sql
alter table table_name
optimize partition part_name_1, part_name_2;
```
- 分析分区,读取并保存分区的健分布
```sql
alter table table_name
analyze partition part_name_1, part_name_2;
```
- 修复分区
```sql
alter table table_name
repair partition part_name_1, part_name_2;
```
- 检查分区
```sql
alter table table_name
@@ -197,59 +210,61 @@ mysql -uroot -p -hsever_ip -Ddb_name
```
# MySQL 5.7 从库多线程同步
```sql
stop slave;
set global slave_parallel_type='logical_clock';
set global slave_parallel_workers=4;
start slave;
show processlist;
```
```sql
stop slave;
set global slave_parallel_type='logical_clock';
set global slave_parallel_workers=4;
start slave;
show processlist;
```
# MySQL 5.7 提示密码复杂度不够
```sql
set global validate_password_policy=0;
```
```sql
set global validate_password_policy=0;
```
# MySQL 5.7 从库复制失败跳过指定数量的事务
```sql
stop slave;
-- 跳过一个事务
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
start slave;
-- 修改 my.cnf
slave-skip-errors=1062,1053,1146,1032 #跳过指定error no类型的错误
slave-skip-errors=all #跳过所有错误
```
```sql
stop slave;
-- 跳过一个事务
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
start slave;
-- 修改 my.cnf
slave-skip-errors=1062,1053,1146,1032 #跳过指定error no类型的错误
slave-skip-errors=all #跳过所有错误
```
# MySQL 5.7 查看全部任务
```sql
-- 分号换成 \G 显示完整 sql
show processlist;
show full processlist;
SELECT command FROM information_schema.processlist;
```
```sql
-- 分号换成 \G 显示完整 sql
show processlist;
show full processlist;
SELECT command FROM information_schema.processlist;
```
# MySQL 5.7 ssl 连接
```
--ssl-mode=REQUIRED
```
```
--ssl-mode=REQUIRED
```
# MariaDB 10.1 修改密码
```sql
UPDATE user SET password=password('newpassword') WHERE user='root';
```
```sql
UPDATE user SET password=password('newpassword') WHERE user='root';
```
# MySQL 5.7 编码
- 查看
```sql
SHOW VARIABLES LIKE 'character_set%';
```
- 数据库连接参数中characterEncoding=utf8 会被自动识别为 utf8mb4但是 autoReconnect=true 必须指定
- 更改数据库编码
```sql
ALTER DATABASE db_name
CHARSET UTF8MB4 COLLATE UTF8MB4_GENERAL_CI;
```
- 更改表编码
```sql
ALTER TABLE table_name
@@ -257,24 +272,27 @@ UPDATE user SET password=password('newpassword') WHERE user='root';
```
# MySQL 5.7 升级数据库管理表结构
```bash
mysql_upgrade -u root -p
```
```bash
mysql_upgrade -u root -p
```
# MySQL 5.7 误删 root 后恢复 root 账户
- 停止 mysql 服务
```bash
systemctl stop mysqld
```
- 修改 my.cnf
```
# 添加如下一行
skip-grant-tables
```
- 启动 mysql 服务
```bash
systemctl start mysqld
```
- 重建 root 账户,并授权
```sql
insert into user
@@ -317,15 +335,18 @@ mysql_upgrade -u root -p
where user='root';
flush privileges;
```
- 停止 mysql 服务
```bash
systemctl stop mysqld
```
- 修改 my.cnf
```
# 删除刚添加的如下一行
#skip-grant-tables
# 删除或注释刚添加的如下一行
skip-grant-tables
```
- 启动 mysql 服务root 账户正常可用
```bash
systemctl start mysqld
@@ -336,6 +357,7 @@ mysql_upgrade -u root -p
```sql
explain sql
```
- select_type 查询类型
- SIMPLE 简单表,没有表连接或子查询
- PRIMARY 最外层的查询
@@ -363,10 +385,10 @@ mysql_upgrade -u root -p
- Using Flesort 依靠索引顺序达不到排序效果,需额外排序
# 统计 insert、delete、update 和 select 次数
```sql
show global status where Variable_name in
('com_insert', 'com_delete', 'com_update', 'com_select');
```
```sql
show global status where Variable_name in
('com_insert', 'com_delete', 'com_update', 'com_select');
```
# csv 文件
- 导出
@@ -386,6 +408,7 @@ show global status where Variable_name in
escaped by '\\'
lines terminated by '\n';
```
- 导入
```
# Shell 终端