Mysql打开binLog - yiyixiaozhi/readingNotes GitHub Wiki

[TOC]

官方阅读参考

CentOS实战:编辑MySQL配置文件:

vim /etc/my.cnf

编辑如下内容:

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
log-bin=mysql-bin
server-id=1

重启服务:

systemctl restart mysqld.service

my.ini中相关设置说明:

#expire_logs_days = 10
#max_binlog_size = 100M 

Expire_logs_days :定义了mysql清除过期日志的时间。

二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。启动时和二进制日志循环时可能删除。
max_binlog_size

如果二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于1GB或小于4096字节。 默认值是1GB。

查看数据库操作日志

mysqlbinlog  /var/lib/mysql/mysql-bin.000001 -v --base64-output=DECODE-ROWS
# 仅打印某天的log一直到最后一行(从5851634行,打印到末尾行)
mysqlbinlog  /var/lib/mysql/mysql-bin.000001 -v --base64-output=DECODE-ROWS | sed -n '5851634,$p' >> /home/yyxz/yyxz/logs/0919sqlbin.log
# 仅打印某天的log一直到最后一行(从5851634行,打印到5851635行)
mysqlbinlog  /var/lib/mysql/mysql-bin.000001 -v --base64-output=DECODE-ROWS | sed -n '5851634,5851635p' >> /home/yyxz/yyxz/logs/0919sqlbin.log

下面的命令将从位置编号为15028的二进制日志条目处开始读取。 $ mysqlbinlog -j 15028 mysqld-bin.000001 > from-15028.out 跳过指定的mysql bin日志中的前10个条目。 $ mysqlbinlog -o 10 mysqld-bin.000001

参考:https://www.cnblogs.com/DataArt/p/10232374.html

结果示例如下:

#190717 11:42:05 server id 1  end_log_pos 3491 CRC32 0x4a91dcfe     Write_rows: table id 119 flags: STMT_END_F### INSERT INTO `yyxz_dev`.`t_send_to_target_configs`### SET###   @1=67###   @2='ARTICLE'###   @3=NULL###   @4=1###   @5='GROUP'###   @6=1563334925###   @7=1563334925# at 3491

其他:mysql命令:

# mysqladmin flush-logs 也可以重新开始新的binary log
mysql -h localhost -u root -pmysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000002 |      154 |              |                  |                   |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)
# 数据库恢复指令mysqlbinlog  --no-defaults /var/lib/mysql/mysql-bin.000001|mysql -uroot -p

主从设置

参考:数据库主从复制备份

# 主数据库
[root@localhost ~]#  mysql -u root -p
mysql> GRANT replication slave ON *.* TO 'slave_yyxz'@'%' IDENTIFIED BY 'yyxz';
mysql> show master status;
+------------------+----------+-----------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB    | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+-----------------+------------------+-------------------+
| mysql-bin.000017 |   358322 | yyxz_dev |                  |                   |
+------------------+----------+-----------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

# 从数据库
# slave数据库设置server-id
sudo vim /etc/my.cnf
## log_bin
server-id=2
# 然后登陆msyql
mysql> change master to
    -> master_host="al.bianxh.top",
    -> master_user="slave_yyxz",
    -> master_password="yyxz",
    -> master_port=22027,
    -> master_log_file="mysql-bin.000017",
    -> master_log_pos=358322;
# 查看设置状态
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status;

数据库备份

参考:https://www.cnblogs.com/yourblog/archive/2019/02/15/10381962.html

# 如果使用expect命令来自动输入密码,需要提前安装expect
yum install expect
# 数据库备份
mysqldump -h 192.168.1.226 -u root -pyyxz  yyxz_prod_mirror > /home/yyxz/yyxz/logs/mysql_$(date "+%Y%m%d_%H:%M:%S").sql
## 阿里云备份脚本/home/yyxz/yyxz-master/DBBackup/backup-AliyunRDS.sh
mysqldump --single-transaction -h rm-m5efcwv7k72h83os1.mysql.rds.aliyuncs.com -P 3306 -u yyxz --set-gtid-purged=off -pyyxz  yyxz_prod > /home/yyxz/yyxz-master/DBBackup/yyxz_prod_AliyunRDS.sql
# 数据库恢复
mysql -h 192.168.1.226 -u root -pyyxz yyxz_cayz < mysql_20191009_15\:21\:54.sql

MacOS安装mysql8

下载:https://dev.mysql.com/downloads/mysql/

wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.18-macos10.14-x86_64.dmg

自定义命令示例:

bianxhdeMacBook-Pro:~ bianxh$ cat ~/.bash_profile 
...
alias ll="ls -al"

CentOS 7安装Mysql8

参考:https://blog.csdn.net/qq_43317529/article/details/83039252

查看Mysql版本

[root@localhost ~]# mysql -V
mysql  Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using  EditLine wrapper

下载rpm源

https://dev.mysql.com/downloads/repo/yum/

Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package Download
(mysql80-community-release-el7-3.noarch.rpm)

找到了下载地址,直接下载(发现本地会下载失败,使用阿里云服务器下载成功):

# centos的yum 源中默认是没有mysql的,所以我们需要先去官网下载mysql的repo源并安装。MySQL8.0 YUM源
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

然后安装源(root用户安装):

# 安装 yum repo文件并更新 yum 缓存
rpm -ivh /home/yyxz/download/mysql80-community-release-el7-3.noarch.rpm
# /etc/yum.repos.d目录下查看到mysql的源信息
[root@localhost yum.repos.d]# ll /etc/yum.repos.d/
-rw-r--r--  1 root root 2076 Apr 25  2019 mysql-community.repo
-rw-r--r--  1 root root 2108 Apr 25  2019 mysql-community-source.repo
# 修改DNS地址为阿里云
vim /etc/resolv.conf
## DNS地址增加阿里云
nameserver 223.5.5.5
## 重启网络服务使其生效
service network restart
# 查看可用的mysql安装源
yum repolist enabled | grep mysql
# 查看可用的mysql版本以及禁用/启用情况:
yum repolist all | grep mysql

Mysql5.7升级MySQL8

# 修改源文件,禁用5.7,启用8.0
## 把里面的8.0enabled改为1就可以了,其他的版本改为0
vim /etc/yum.repos.d/mysql-community.repo
# 修改完之后查看可用版本(显示8.0即为成功)
yum repolist enabled | grep mysql
# 8.0版本启用后,安装Mysql
yum install -y mysql-community-server
# 升级后新建用户并授权
create user 'yyxz'@'%' identified by 'yyxz';
grant all privileges on *.* to 'yyxz'@'%';
FLUSH PRIVILEGES;

离线安装MySQL8

# 进入网站下载:https://dev.mysql.com/downloads/mysql/
# 选择:Red Hat Enterprise Linux / Oracle Linux
# 下载地址
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-community-client-8.0.18-1.el7.x86_64.rpm
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-community-server-8.0.18-1.el7.x86_64.rpm

MySQL变量

下面是获取timeout的变量:

mysql> show global variables like "%timeout%";
官方文档说明:https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html

分析SQL性能

 **售后工程师 :**    **您好,麻烦您使用explain 分析下您这条语句在RDS实例和您本地的执行情况,看看扫描的行数等信息是否一样,另外您也可以参考以下方法看下您的SQL消耗时间情况:
set profiling=1;                       (启动profile ,这是一个session级别的配置)
select * form xxx;                 ( 执行查询语句)
show profiles;                        (查看每个查询消耗的时间信息)
show profile for query N          (查询ID为N的每个阶段消耗的时间,N为上个命中query的值)
show profile cpu for query N;       (查询CPU消耗的信息)
SHOW PROFILE block io, cpu FOR QUERY 126;       (查询io,CPU消耗的信息)
对比下您的执行情况**  

# 查看innodb缓存
 SHOW VARIABLES LIKE 'innodb_buffer_pool%';
# 查询当下的动作
 SHOW PROCESSLIST;

查看RDS binLog

  • 连接数据库

    mysql -hrm-m5e39mf182j3rq3n590130.mysql.rds.aliyuncs.com -uyyxz -pyyxz -P3306
    
  • 查看当前的bin-log文件

    mysql> show master status;
    +------------------+----------+--------------+------------------+------------------------------------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                              |
    +------------------+----------+--------------+------------------+------------------------------------------------+
    | mysql-bin.000079 |  3129679 |              |                  | b1742218-22f6-11eb-bed4-00163e0654c4:1-3136052 |
    +------------------+----------+--------------+------------------+------------------------------------------------+
    1 row in set (0.00 sec)
  • 输出bin-log到文件中

    mysqlbinlog -uyyxz -pyyxz -hrm-m5e39mf182j3rq3n590130.mysql.rds.aliyuncs.com --read-from-remote-server mysql-bin.000079 --start-datetime="2020-11-28 17:59:00" --stop-datetime="2020-11-28 18:00:00" -vv --base64-output=decode-rows > mysql-bin.000079.log
    
⚠️ **GitHub.com Fallback** ⚠️