Skip to content

MYSQL相关知识

MYSL8安装

到官网下载mysql源码 mysql, 下载: Title

注意 下载mysql安装包时,需要检查本地系统glibc版本号,下对应版本的安装包

linux
rpm -qa | grep glibc

TitleTitle初始化

解压源码包,创建data目录,进入bin目录执行初始化操作:

md
./mysqld --initialize --console --user=root --basedir=/usr/local/mysql8 --datadir=/usr/local/mysql8/data

–user=root 指定用户(很关键)

启动MySQL服务

启动服务前先修改support-files/mysql.server的basedir目录和datadir目录路径,并放好my.cnf配置文件到data目录下
Title

Title

Title

启动mysql服务: cd support-files/(进入support-files目录) ./mysql.server start(执行启动命令)

修改登录密码

如果自定义socket目录,则用一下方式连接数据库(-S指定socket目录):
./mysql -hlocalhost -uroot -P6607 -p [-S /usr/local/mysql8/support-files/mysql.sock] 修改密码:

md
alter user user() identified by "123456";

设置远程登录

md
mysql> use mysql;
mysql> update user set user.Host='%' where user.User='root';
mysql> flush privileges;

navicat不支持mysql8新加密解决方法

md
alter user 'root'@'%' identified with mysql_native_password by '123456';
flush privileges;

mysql8创建和给用户授权

CREATE USER 'userName'@'%' IDENTIFIED [with mysql_native_password]  BY '123456';

授权:

GRANT ALL PRIVILEGES ON db.* TO 'userName'@'%';

GRANT ALL PRIVILEGES ON *.* TO 'userName'@'%';

GRANT SELECT ON db.* TO 'userName'@'%'

GRANT SELECT ON *.* TO 'userName'@'%'

GRANT SELECT,INSERT ON *.* TO 'userName'@'%'

mysql8配置

md
[mysqld]
skip-name-resolve
skip_ssl
server_id=1
log-slave-updates=1
log-bin=mysql-master-binlog
binlog_format=row
expire_logs_days=30
sync_binlog=1
gtid_mode=on
enforce_gtid_consistency=on
port=6306
user=root
# 设置mysql的安装目录
basedir=/usr/local/mysql8/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql8/data
# 允许最大连接数
max_connections=10000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
sql_mode="NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT"
log-output=FILE
general-log=0
general_log_file="DESKTOP-2JV12RE.log"
slow-query-log=1
slow_query_log_file="DESKTOP-2JV12RE-slow.log"
long_query_time=10

# Binary Logging.
# log-bin

# Error Logging.
log-error="DESKTOP-2JV12RE.err"
bulk_insert_buffer_size=83886080

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=6306
default-character-set=utf8

常用运维命令

查看当前运行事务

md
select * from information_schema.INNODB_TRX;

查看表索引

md
show index from ${table}

查看表结构

md
show full columns from ${table}

查看执行计划

md
explain sql

id:选择标识符,select_type:表示查询的类型。,table:输出结果集的表,partitions:匹配的分区,type:表示表的连接类型 possible_keys:表示查询时,可能使用的索引,key:表示实际使用的索引,key_len:索引字段的长度,ref:列与索引的比较 rows:扫描出的行数(估算的行数),filtered:按表条件过滤的行百分比,Extra:执行情况的描述和说明

type

对表访问方式,表示MySQL在表中找到所需行的方式,又称“访问类型”。
常用的类型有: ALL、index、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)
ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行
index: Full Index Scan,index与ALL区别为index类型只遍历索引树
range:只检索给定范围的行,使用一个索引来选择行
ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
eq_ref: 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件
const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system
NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成

备份还原

不停机备份

sql
./mysqldump -h -u -P 3306 -p --single-transaction --set-gtid-purged=OFF --extended-insert demo > demo.sql

只备份某些表

sql
../mysqldump -h -u -P 3306 -p --single-transaction --set-gtid-purged=OFF --no-create-info --complete-insert --extended-insert cloud_cts table1 table2 table3 >cloud_cts.sql

忽略某些表

sql
mysqldump -u username -p --ignore-table=db_name.table1 --ignore-table=db_name.table2 db_name > backup.sql

导入
通过source命令导入

More

Check out the documentation for the full list of markdown extensions.