和磁盘的数据打交道
MySQL 基于存储引擎管理 表空间数据数据文件
Innodb存储引擎
ibd:存储表的数据行和索引
frm:表基本结构信息
Myisam存储引擎
frm
myi
myd
事务
保证交易的完整性
ACID特性
Atomic(原子性)
所有语句作为一个单元全部成功执行或全部取消。不允许出现中间过程.
Consistent(一致性)
如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。
Isolated(隔离性)
事务之间不相互影响。
两个方面: 修改同一行 , 一致性读
Durable(持久性)
事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。
redo undo 实现了 ACD
行级锁:事务修改行,会锁定这行(持有这行的锁)
隔离级别(一致性读):
RU :已填写订单为提交
RC :已提交订单
RR :可重复读取数据,除非重新登录之后才能读取新的数据
S :事务执行不可读
begin;
xxx
xxx
commit;
begin;
xxx
xxx
begin;
xxxxx
xxx
rollback;
隐式提交
set autocommit=0;
永久(打开文件添加语句):
my.cnf
autocommit=0;
begin
xxxxxx
xxx
begin
begin
xxx
xxx
create drop alter grant
log_error=/var/log/mysql.log
分析[error],获取错误信息
开启二进制功能:
cat /etc/my.cnf
log_bin=/opt/mysql/data/mysql-bin
binlog_format=row
server_id=6
sync_binlog=1
mysql> show binary logs;
mysql> show master status;
按事件查看日志内容
mysql> show binlog events in 'mysql-bin.000012';
直接查看日志内容
mysqlbinlog --base64-output=decode-rows -vvv /opt/mysql/data/mysql-bin.000012 |more
[root@standby data]# mysqlbinlog --start-position=219 --stop-position=186613 /opt/mysql/data/mysql-bin.000012 >/tmp/binlog.sql
slow_query_log=1
slow_query_log_file=/opt/mysql/data/standby-slow.log
long_query_time=1
log_queries_not_using_indexes=1
使用Box Anemometer基于pt-query-digest将MySQL慢查询可视化
select xxxx from t1 into outfile '/tmp/redis.txt'
mysql -uroot -p123 -e "select concat('hmset city_',id,' id ', id,' name ',name,' countrycode ',countrycode,' district ',district,' population ',population) from world.city limit 10 "|redis-cli
mysqldump
-u 用户名
-p 密码
-S
--socket=path, -S path
用于连接localhost,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。
-h 主机地址
-P --password, -p 链接数据库密码 --port, -P 连接数据库端口号
-A 全库备份
mysqldump -uroot -p123 -A >/backup/full.sql
-B 备份一个或多个指定库
mysqldump -uroot -p123 -B world bbs >/backup/wb.sql
备份单库中的表
mysqldump -uroot -p123 world city country >/backup/ccc.sql
--master-data=2 备份时记录二进制日志的状态
--single-transaction 开启innodb热备功能
-R 导出存储过程以及自定义函数
--triggers 导出触发器。该选项默认启用,用--skip-triggers禁用它。
mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R --triggers >/backup/full.sql
Master slave
3307---->3308
主库开启二进制日志(文件内添加一句代码)
vim /data/3307/my.cnf
log_bin=/data/3307/mysql-bin
[root@standby 3307]# systemctl restart mysqld3307
[root@standby backup]# mysql -S /data/3307/mysql.sock
grant replication slave on *.* to repl@'10.0.0.%' identified by '123';
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
[root@standby 3307]# mysql -S /data/3308/mysql.sock
mysql> CHANGE MASTER TO
MASTER_HOST='10.0.0.200',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3307,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
mysql> start slave;
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
读写分离
atlas 360 C++
maxscale mariadb
proxySQL
DRDS(买)
mysql router
分布式架构
分片集群
Mycat
DBLE
TDDL
DRDS
注意:MySQL不支持的功能
事务,视图,外键和引用完整性,存储过程和触发器