learning_notes

学习笔记

View project on GitHub

工具

mysqlbinlog

binlog

mysql>  show binlog events in 'mysql-bin.000086'
sudo ../bin/mysqlbinlog --no-defaults --base64-output="decode-rows" -v  mysql-bin.000086

sudo ./mysqlbinlog –read-from-remote-server –raw –host=127.0.0.1 –port=3307 –user=root –password –stop-never –result-file=./ mysql-bin.000001

binlog恢复
/usr/local/mysql/bin/mysqlbinlog --stop-position=953 --database=zyyshop /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop

远程复制

sudo ./mysqlbinlog --read-from-remote-server --raw --host=rm-wz928l08s8io5h0l76o.mysql.rds.aliyuncs.com --port=3306 --user=statis --password --stop-never --result-file=./test/ mysql-bin.001083

    --read-from-remote-server:用于备份远程服务器的binlog。如果不指定该选项,则会查找本地的binlog。

    --raw:binlog日志会以二进制格式存储在磁盘中,如果不指定该选项,则会以文本形式保存。

    --user:复制的MySQL用户,只需要授予REPLICATION SLAVE权限。

    --stop-never:mysqlbinlog可以只从远程服务器获取指定的几个binlog,也可将不断生成的binlog保存到本地。指定此选项,代表只要远程服务器不关闭或者连接未断开,mysqlbinlog就会不断的复制远程服务器上的binlog。

    mysql-bin.000001:代表从哪个binlog开始复制。

    除了以上选项外,还有以下几个选项需要注意:

    --stop-never-slave-server-id:在备份远程服务器的binlog时,mysqlbinlog本质上就相当于一个从服务器,该选项就是用来指定从服务器的server-id的。默认为-1。

    --to-last-log:代表mysqlbinlog不仅能够获取指定的binlog,还能获取其后生成的binlog,获取完了,才终止。如果指定了--stop-never选项则会隐式打开--to-last-log选项。

    --result-file:用于设置远程服务器的binlog,保存到本地的前缀。譬如对于mysql-bin.000001,如果指定--result-file=/test/backup-,则保存到本地后的文件名为/test/backup-mysql-bin.000001。注意:如果将--result-file设置为目录,则一定要带上目录分隔符“/”。譬如--result-file=/test/,而不是--result-file=/test,不然保存到本地的文件名为/testmysql-bin.000001。

mysqldump
#一般备份数据库需要加全局读锁
mysqldump使用参数-single-transaction相当于启动一个事务,数据库可以正常读写
# 导出
mysqldump -h$host -P$port -u$user --add-locks=0 --no-create-info --single-transaction  --set-gtid-purged=OFF db1 t --where="a>900" --result-file=/client_tmp/t.sql
# --single-transaction 导出表db1 t不加锁,开启一个事务快照
# --no-create-info 不导出表结构,一条插入多个值,插入快 
# --add-locks=0 不增加" LOCK TABLES t WRITE;"
# --set-gtid-purged=OFF 不输出gtid相关信息
# --result-file 导出目标文件
# –skip-extended-insert 一行一条插入语句

# 插入
mysql -h127.0.0.1 -P13000  -uroot db2 -e "source /client_tmp/t.sql"

csv
# 导出
select * from db1.t where a>900 into outfile '/server_tmp/t.csv'; #secure_file_priv 限制导出文件的路径 empty:不限制 null:禁止导出
# 或者
mysqldump -h$host -P$port -u$user ---single-transaction  --set-gtid-purged=OFF db1 t --where="a>900" --tab=$secure_file_priv

# 导入
load data infile '/server_tmp/t.csv' into table db2.t;