一、主库备份
1、备份主数据库数据
mysqldump -hip -uusername -ppassword --single-transaction --master-data=1 --databases dbname > dbname.sql
备注:
--single-transaction 启用一个事务来进行备份操作,备份过程中不会对数据库进行锁操作
--master-data=1 备份必须加上此参数。当这个参数的值为1的时候,mysqldump出来的文件就会包括CHANGE MASTER TO这个语句,CHANGE MASTER TO后面紧接着就是file和position的记录,在slave上导入数据时就会执行这个语句,salve就会根据指定这个文件位置从master端复制binlog
二、从库恢复
1、查看slave状态
MySQL [table]> show slave status;
2、停止slave状态,清除从库主从信息
MySQL [table]> stop slave; (停止从库)
MySQL [table]> reset slave all; (取消从库和主从的关系)
3、将从库已同步主库数据库删除
MySQL [table]> DROP DATABASE DBNAME;
4、登录从数据库
MySQL [table]> mysql -hip -uusername -ppasswd -Pport
5、将备份文件导入到从服务器
将备份过来的数据导入到从服务器
MySQL [table] > CREATE DATABASE DBNAME;
MySQL [table] >source /dbname.sql ;
导入之后查看数据是否导入成功
6、查看主服务器备份数据MASTER_LOG_FILE地址及MAST_LOG_POS位置
cat dbname.sql |grep "MASTER_LOG_FILE"
-- CHANGEMASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=7334223423;
7、执行同步语句,这里填写的binlog日志文件及偏移量位置为第6步中的MASTER_LOG_FILE地址MAST_LOG_POS的值
CHANGE MASTER TO MASTER_HOST='192.168.1.1',MASTER_USER='rep',MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='mysql-bin.000015',MASTER_LOG_POS=7334223423;
8、启动slave
MySQL [table] > start slave;
9、查看slave状态
MySQL[table]> show slave status G ;
查看slave两个线程是否为YES状态
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
查看占用CPU高的SQL,top –H –p <mysql进程id>,然后使用mysql内部的表问题定位sql:
SELECTa.THREAD_OS_ID,b.user,b.host,b.db,b.command,b.time,b.state,http://b.info
FROMperformance_schema.threads a,information_schema.processlist b
WHEREb.id = a.processlist_id;
-d, --database=name 仅显示指定数据库的转储内容。
-o, --offset=# 跳过前N行的日志条目。
-r, --result-file=name 将输入的文本格式的文件转储到指定的文件。
-s, --
short
-form 使用简单格式。
--
set
-charset=name 在转储文件的开头增加
'SET NAMES character_set'
语句。
--start-datetime=name 转储日志的起始时间。
--stop-datetime=name 转储日志的截止时间。
-j, --start-position=# 转储日志的起始位置。
--stop-position=# 转储日志的截止位置。
.mysqlbinlog.exe --start-datetime="2021-10-29 13:00:00" --stop-datetime="2021-10-29 14:30:00" D:dingFilesmysql-5.6.45-winx64mysql-5.6.45-winx64inlog_bin.000170 --result-file=C:UsersxpcDesktop111.txt