返回顶部
首页 > 资讯 > 数据库 >mysql常用操作 (包括mysqldump,pt-table)
  • 943
分享到

mysql常用操作 (包括mysqldump,pt-table)

2024-04-02 19:04:59 943人浏览 泡泡鱼
摘要

生产Mysqldump参数mysqldump -uroot '-pxx' -q --all-databases --lock-all-tables --routines --triggers --event


生产Mysqldump参数

mysqldump -uroot '-pxx' -q --all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs --Socket=mysql.sock --set-gtid-purged=OFF


mysqldump 备份参数

接下来就是具体的解决步骤,首先备份数据。备份时不加 –master-data 参数和 –single-transaction。究其原因,–master-data 禁用 –lock-tables 参数,在和 –single-transaction 一起使用时会禁用 –lock-all-tables。在备份开始时,会获取全局 read lock。 –single-transaction 参数设置默认级别为 REPEATABLE READ,并且在开始备份时执行 START TRANSACTION。在备份期间, 其他连接不能执行如下语句:ALTER TABLE、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE。MySQL 同步夯住,如果加了上述参数,mysqldump 也会夯住。mysqldump 会 FLUSH TABLES、LOCK TABLES,如果有 –master-data 参数,会导致 Waiting for table flush。同样,有 –single-transaction 参数,仍然会导致 Waiting for table flush。另外,还可以看到 Waiting for table metadata lock,此时做了 DROP TABLE 的操作。此时可以停掉 MySQL 同步来避免这个问题。



参考oldbody


全库备份

#!/bin/bash

#mysqldump to fully backup mysql data

if [ -f /root/.bash_profile ];then

source /root/.bash_profile

fi 


BakDir=/opt/mysqlbak/full

LogFile=/opt/mysqlbak/full/bak.log

 

Date=`date +%Y%m%d`

Begin=`date +"%Y年%m月%d日 %H:%M:%S"`

cd $BakDir

DumpFile=$Date.sql

GZDumpFile=$Date.sql.tgz

mysqldump -uroot -p'xxxxxx' --all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs --socket=/opt/3306/mysql.sock --set-gtid-purged=OFF > $DumpFile

tar zcvf $GZDumpFile $DumpFile

if [ -f $DumpFile ];then

rm -rf $DumpFile

fi

Last=`date +"%Y年%m月%d日 %H:%M:%S"`

echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile

sleep 1

find /opt/mysqlbak/full -name "*.tgz" -mtime +3 -exec rm -rf {} \;


分库备份

#!/bin/bash

if [ -f /root/.bash_profile ];then

source /root/.bash_profile

fi 


MysqlUser=root

PassWord='xxxxxx'

Port=3306

Socket="/opt/$Port/mysql.sock"

MysqlCmd="mysql -u$MysqlUser -p$PassWord -S $Socket"

Database=`$MysqlCmd -e "show databases;"|egrep -v "Database|_schema|mysql"`

MysqlDump="mysqldump -u$MysqlUser -p$PassWord -S $Socket"

#IP=`ifconfig eth0|awk -F "[:]+" 'NR==2 {print $4}'`

BackupDir=/opt/mysqlbak/fenku

LogFile=/opt/mysqlbak/fenku/bak.log

Begin=`date +"%Y年%m月%d日 %H:%M:%S"`


[ -d $BackupDir ] || mkdir -p$BackupDir

  

for dbname in $Database

  do

     $MysqlDump --events --set-gtid-purged=OFF -B $dbname|gzip>/$BackupDir/${dbname}_$(date +%F)_bak.sql.gz

done

Last=`date +"%Y年%m月%d日 %H:%M:%S"`

echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile

sleep 1


find /opt/mysqlbak/fenku -name "*.gz" -mtime +3 -exec rm -rf {} \;


还原


单个还原  

mysqldump备份中恢复单张表


mysql -uroot -pMANAGER erp --one-database <dump.sql


SELECT TABLE_NAME,TABLE_ROWS,DATA_LENGTH/1024/1024 "DATA_LENGTH",CREATE_TIME,TABLE_COLLATION FROM  INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'xx' ORDER BY TABLE_ROWS DESC;


看DATA_LENGTH大小是否一致


pt工具检测


pt-table-checksum是一个在线验证主从数据一致性的工具,主要用于以下场景:

1. 数据迁移前后,进行数据一致性检查

2. 当主从复制出现问题,待修复完成后,对主从数据进行一致性检查

3. 把从库当成主库,进行数据更新,产生了"脏数据"

4. 定期校验


pt-table-checksum 使用注意

默认当数据库有25个以上的并发查询时,pt-table-checksum会暂停。可以设置 --max-load 选项来设置这个阀值

当用 Ctrl+C 停止任务后,工具会正常的完成当前 chunk 检测,下次使用 --resume 选项启动可以恢复继续下一个 chunk

utf8

 # pt-table-sync  --execute  --replicate \

 test.checksums   --charset=utf8 \

 --sync-to-master h=192.168.1.207,P=3306,u=root,p=123456


1,在恢复数据的时候有出来过只能恢复部份从库的情况,我的操作方法是把输出的语句保存在一个文本里面,然后直接贴到没有正常恢复的从库去执行。

2,--chunk-size-limit默认设置为2,当遇到行数多的大表时pt-table-checksum可能会跳过不检测,提示:

Skipping table db.table because on the master it would be checksummed in one chunk but on these replicas it has too many rows:

  355085 rows on asddb.xxx

The current chunk size limit is 239358 rows (chunk size=119679 * chunk size limit=2.0).

此时可以根据输出的提示将--chunk-size-limit适当调大一点。


slave  

show slave status\G;

master

show slave hosts;

show variables like 'ENFORCE_GTID_CONSISTENCY';

show global variables like '%gtid_mode%';

set @@global.gtid_mode = off_permissive;

set @@global.enforce_gtid_consistency = on;

autocommit=1


yum -y  install perl-Time-HiRes perl-DBI perl-DBD-MySQL

percona-toolkit-2.2.18.tar.gz

make && make install

GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'USER'@'MASTER_HOST' identified  by 'PASSWORD';


SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_schema='xx'


GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'checksums'@'masterip' IDENTIFIED BY 'xx';


grant all on test.* to 'checksums'@'masterip' IDENTIFIED BY 'xx';


PTDEBUG=1 /usr/local/bin/pt-table-sync --replicate=test.checksums --recursion-method=processlist -d xx --tables=pub_dditem --port=3306 h='172.29.12.197',u='checksums',p='MANAGER' --print --execute


pt-table-sync 使用注意

1.采用replace into来修复主从不一致,必须保证被replace的表上有主键或唯一键,否则replace into退化成insert into,起不到修复的效果。这种情况下pt-table-sync会采用其他校验和修复算法,但是效率非常低,例如对所有列的group by然后求count(*)(表一定要有主键!)。

2.主从数据不一致需要通过replace into来修复,该sql语句必须是语句级。pt-table-sync会把它发起的所有sql语句都设置为statement格式,而不管全局的binlog_format值。这在级联A-B-C结构中,也会遇到pt-table-checksum曾经遇到的问题,引起行格式的中继库的从库卡库是必然。不过pt-table-sync默认会无限递归的对从库的binlog格式进行检查并警告。

3.由于pt-table-sync每次只能修复一个表,所以如果修复的是父表,则可能导致子表数据连带被修复,这可能会修复一个不一致而引入另一个不一致;如果表上有触发器,也可能遇到同样问题。所以在有触发器和主外键约束的情况下要慎用。pt-table-sync工具同样也不欢迎主从异构的结构。pt-table-sync工具默认会进行先决条件的检查。

4.pt-table-sync在修复过程中不能容忍从库延迟,这正好与pt-table-checksum相反。如果从库延迟太多,pt-table-sync会长期持有对chunk的for update,然后等待从库的master_pos_wait执行完毕或超时。从库延迟越大,等待过程就越长,主库加锁的时间就越长,对线上影响就越大。因此要严格设置max-lag。

5.对从库数据的修复通常是在主库执行sql来同步到从库。因此,在有多个从库时,修复某个从库的数据实际会把修复语句同步到所有从库。数据修复的代价取决于从库与主库不一致的程度,如果某从库数据与主库非常不一致,举例说,这个从库只有表结构,那么需要把主库的所有数据重新灌一遍,然后通过binlog同步,同时会传递到所有从库。这会给线上带来很大压力,甚至拖垮集群。正确的做法是,先用pt-table-checksum校验一遍,确定不一致的程度:如果不同步的很少,用pt-table-sync直接修复;否则,用备份先替换它,然后用pt-table-sync修复。 说明: 这实际提供了一种对myisam备份的思路:如果仅有一个myisam的主库,要为其增加从库,则可以:先mysqldump出表结构到从库上,然后启动同步,然后用pt-table-sync来修复数据。


1.Http://blog.itpub.net/29733787/viewspace-1462550/

show master status ;

show slave status \G;

SET @@SESSION.GTID_NEXT= '5882bfb0-c936-11e4-a843-000c292dc103:15';

2.

pt 如何更好的使用pt工具

1、是的,在凌晨2点开始进行checksum

2、不会,我们严格控制了每个chunk的大小,锁粒度及时间相当短,并且我们也二次开发了pt-table-checksum,使得风险更可控


故障恢复

mysqldump全备配合binlog做增量备份  通过mysqlbinlog还原数据


mysqldump常用

grep -i "change master to" master-data.sql  mysql5.5主从能用到


Mysqldump导入数据库很慢的解决办法

--max_allowed_packet=*****           客户端/服务器之间通信的缓存区的最大大小;

--net_buffer_length=****                 tcp/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行

参照查询到的目标数据参数,导出数据;

# mysqldump -uroot -p*** 原数据库 -e --max_allowed_packet=4194304 --net_buffer_length=16384 > file.sql


只备份表结构

mysqldump --opt -d 数据库名 -u root -p > xxx.sql 


导出數據库為dbname某张表(test)结构及表數據(不加-d)

mysqldump -uroot -pdbpasswd dbname test>db.sql;


导出整个数据库结构(不包含数据)

mysqldump -h localhost -uroot -p123456  -d database > dump.sql

 

导出单个数据表结构(不包含数据)

mysqldump -h localhost -uroot -p123456  -d database table > dump.sql


mysqldump注意事项


参考 http://huaxin.blog.51cto.com/903026/1846224

mysqldump -uroot -p123456 xxx > /opt/xxx.sql   #备份数据库xxx

egrep -v "#|\*|--|^$" /opt/xxx.sql


mysqldump -uroot -p123456 xxx --default-character-set=latin1 > /opt/xxx1.sql

egrep -v "#|\*|--|^$" /opt/xxx1.sql


mysqldump -uroot -p123456 -B xxx --default-character-set=latin1 > /opt/xxx1_B.sql

diff xxx1.sql xxx1_B.sql   对比没有加 -B选项  和加 -B选项时候的区别

说明:直观看 加了 -B 参数的作用是在导出数据库的时候增加了 创建数据库和连接数据库的命令了,即如下两条语句

CREATE DATABASE `xxx` ;


总结

1、导出数据用-B参数

2、用gzip对备份的数据压缩

mysqldump 的工作原理

利用mysqldump命令备份数据的过程,实际上就是把数据从mysql库里面以逻辑的sql语句的形式输出


cat mysql.sh   #备份数据库多个库的脚本

#!/bin/bash

for dbname in `mysql -uroot -p123456 -e "show databases;"|grep -Evi "database|info|perf"`

do

    mysqldump  -uroot -p123456  --events -B ${dbname}|gzip > /opt/${dbname}.sql.gz

done 


备份单个表

mysqldump -uroot -p123456 martin student > one.sql  


备份多个表

mysqldump -uroot -p123456 martin student student1 > two.sql


mysqldump -uroot -p123456 -d martin student1 

只备份student1  表的结构  martin代表数据库


mysqldump -uroot -p123456 -A -B --events|gzip > /opt/all.sql.gz   -A代表所有数据库


mysqldump -uroot -p123456 -A -B -F --events|gzip > /opt/all.sql.gz   -F 会刷新bin-log


mysqldump -uroot -p123456 --master-data=1 --compact martin       #--master-data=1 该参数会找bin-log位置


mysqldump -uroot -p123456 --master-data=2 --compact martin       #--master-data=2 该参数会找bin-log位置,但是语句被注释,实际并不执行


mysqldump的关键参数说明

1、-B 指定多个库,会增加建库语句和use语句

2、--compact 去掉注释,适合调试输出 生产环境不用

3、-A 备份所有库

4、-F 刷新binlog日志

5、--master-data=1 增加binglog日志文件名及对应的位置点

6、-x 锁表

7、-l  只读锁表

8、-d  只备份表结构

9、-t  只备份数据

10、--single-transaction  适合innodb事务数据库备份


--master-data[=#] 

If equal to 1, will print it as a CHANGE MASTER command; if equal to 2, that command will 

be prefixed with a comment symbol

这个参数会运行--lock-all-tables,将master的binlog和postion信息写入SQL文件的头部,除非结合--single-transaction(但并不是说就完全的不会锁表了,执行的时候也会添加短暂的全局读锁)


生产场景myisam备份:

mysqldump -uroot -p123456 -A -B --master-data=1 -x --events|gzip > /opt/all.sql.gz

生产场景innodb备份:

mysqldump -uroot -p123456 -A -B --master-data=1 --events --single-transaction|gzip > /opt/all.sql.gz


system ls /opt

rh  xxx1_B.sql  xxx1_B.sql.gz  xxx1.sql  xxx.sql

source /opt/xxx1_B.sql 


mysql5.7 mysqldump参数--all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs --socket=/opt/3306/mysql.sock --set-gtid-purged=OFF


mysqldump重叠备份带来的锁表问题  2013

解决方法:

1.如果你只需要文件备份,不需要经常建立从库,那么可以去掉--master-data。

2.如果你的数据量很大 or 备份时的master信息非常需要,那么可以调整备份周期,避开两次备份出现重叠的情况



您可能感兴趣的文档:

--结束END--

本文标题: mysql常用操作 (包括mysqldump,pt-table)

本文链接: https://lsjlt.com/news/43786.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql常用操作 (包括mysqldump,pt-table)
    生产mysqldump参数mysqldump -uroot '-pxx' -q --all-databases --lock-all-tables --routines --triggers --event...
    99+
    2024-04-02
  • 什么是Mysqldump常用备份操作命令
    下文主要给大家带来什么是Mysqldump常用备份操作命令,希望这些内容能够带给大家实际用处,这也是我编辑Mysqldump常用备份操作命令这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。1.1.1...
    99+
    2024-04-02
  • MySQL 常用操作
    1 创建/打开/删除数据库 create database db; create database db character set utf8mb4; use db; drop database db; alter databas...
    99+
    2021-04-21
    MySQL 常用操作
  • mysql常用操作
    Mysql创建数据库Mysql>create database test;Mysql新增用户与密码Mysql>grant all on *.* to ucenter@'%' identified...
    99+
    2024-04-02
  • mysql中常用的聚合函数包括
    mysql 中常用的聚合函数用于汇总计算,包括:1. sum 求和;2. count 计数;3. avg 平均值;4. max 最大值;5. min 最小值;6. group_conca...
    99+
    2024-05-01
    mysql 聚合函数
  • navicat,mysql常用操作
    mysql更新表的某个字段,将字段的值截取后保存 navicat复制一个表里所有的字段的快捷方式pgsql -- or mysql 有时需要复制一个表里的所有的字段用来拼写sql字段 列表,并且还需要...
    99+
    2024-04-02
  • mysql命令的常用参数包括什么
    mysql 命令提供了各种用于定制其功能和行为的参数,包括:用户认证:-u 指定用户名,-p 提示输入密码,--password 直接指定密码。连接:-h 指定主机地址,-p 指定端口号...
    99+
    2024-04-14
    mysql
  • 工作中MySql常用操作
    登录MySQL,如果连接远程数据库,需要用-h指定hostname。#mysql -h hostname -u root -p#mysql -uroot -p -S /data/3306/mysql.soc...
    99+
    2024-04-02
  • MySQL 常用操作语句
    原文:https://www.cnblogs.com/landiss/p/14646051.html...
    99+
    2022-02-16
    MySQL 常用操作语句 数据库入门 数据库基础教程
  • mysql常用操作命令
    ###########mysql常用操作命令#############1.安装mysqlyum install mysql mysql-server /etc/init.d/mysqld star...
    99+
    2024-04-02
  • 常用的云服务器包括什么功能和作用
    高性能 云服务器通常是一种基于虚拟化技术的服务器,可以提供高达每秒数百万次的计算能力,这使得它们在面对大规模并发访问时具有很强的处理能力。云服务器通常采用大型机、小型机等不同的硬件配置,可以满足各种不同应用场景的需求。 低成本 云...
    99+
    2023-10-28
    作用 常用 功能
  • 常用的MySQL优化操作
    操作系统配优化 执行计划与锁表查看 --查看连接信息以及连接执行的命令 SHOW PROCESSLIST --查看当前被锁住的表 show OPEN TABLES where In_use > 0; ...
    99+
    2014-09-16
    常用的MySQL优化操作
  • MySQL常用命令及操作
    1、登录与退出     1)登录         windows下直接在DOS命令窗口用root用户登录输入my...
    99+
    2022-05-15
    MySQL 命令 操作
  • mysql 常用基础操作命令
    1  连接Mysql格式: mysql -h主机地址 -u用户名 -p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root...
    99+
    2024-04-02
  • Linux 操作MySQL常用命令行
       1、显示数据库  mysql> show databases;  +----------+  | Database |  +----------+  | mysql  |  ...
    99+
    2024-04-02
  • mysql数据库的常用操作
    这篇文章主要讲解了“mysql数据库的常用操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql数据库的常用操作”吧!mysql的常用操作(添加用户)...
    99+
    2024-04-02
  • mysql——cmd进入mysql及常用的mysql操作
    在命令行打开mysql的方法:首先在cmd命令行中输入“net start mysql”;然后输入“mysql -hlocalhost -uroot -p”,回车;最后输入mysql的账号密码,回车即可打开mysql数据库。 在cmd命令行...
    99+
    2023-09-09
    mysql 数据库 服务器
  • Golang strings包常用字符串操作函数
    目录func Contains func HasPrefix func HasSuffix func Replace func Split func ToLower func ToU...
    99+
    2024-04-02
  • MySql常用表操作命令总结
    本篇内容介绍了“MySql常用表操作命令总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1:使用SH...
    99+
    2024-04-02
  • MySQL常用的命令操作大全
    这篇文章主要介绍“MySQL常用的命令操作大全”,在日常操作中,相信很多人在MySQL常用的命令操作大全问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL常用的命令操作...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作