#msyql 5.6 主从故障恢复过程
###################故障模拟 ###主库 #1 建库建表 mysql -e "drop database class; create database class; USE class; create table student( name char(20) not null, age int(2) not null);" ##2 插入数据# 不用等命令执行完,敲了回车就可以在从库上执行第3项命令 for i in {1..10};do mysql -e "USE class;insert into student values ('aaabbb$i',$i);" ; done mysql -e "select * from class.student;" /etc/init.d/mysqld stop ####3 从库执行 mysql -e 'stop slave;show slave status\G;' |grep Slave ####主库执行跑完以后 执行下面命令 mysql -e 'show slave status\G;' |grep Slave ###############################从升主 操作过程 ##1 ##查看master.info文件,对比选择pos最大的作为新的主库 mysql -e 'show slave status\G;' |grep Read_Master_Log_Pos head /usr/local/mysql/data/master.info ###数据库目录,删除master.info和relay-log.info文件, 配置my.cnf文件,开启log-bin,如果有log-slaves-updates和read-only则要注释掉,执行reset master mv -f /usr/local/mysql/data/master.info{,bak} mv -f /usr/local/mysql/data/relay-log.info{,bak} mysql -e "grant replication slave on *.* to 'repl'@'%' identified by 'replpwd'; flush privileges; select User,Host from mysql.user;" sed -i 's/^log-slave-updates=/#log-slave-updates=/g' /etc/my.cnf sed -i 's/^read-only=/#read-only=/g' /etc/my.cnf egrep -v '^#|^$' /etc/my.cnf /etc/init.d/mysqld restart mysql -e "stop slave; reset slave; reset master;" mysql -e "show master status\G" ############### ##########其它从库上操作 更新 mysql -e "stop slave; reset slave; CHANGE MASTER TO MASTER_HOST='192.168.11.41', MASTER_USER='repl', MASTER_PASSWORD='replpwd', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=149976, MASTER_CONNECT_RETRY=10; start slave;" mysql -e 'show slave status\G;' |grep Slave #############################################################通过旧主库上的 binlog恢复数据 #################1。先通过 新主库上 找到旧的/usr/local/mysql/data/master.info文件 找到 binlog文件名 和MASTER_LOG_POS的值 应该是文件的第二行和三行 head /usr/local/mysql/data/master.info #23 #mysql-bin.000002 #65428 #192.168.11.43 #repl #replpwd #3306 #10 #0 # ##########2. 通mysqlbinlog 命令把数据提取到sql文件中,并同步到新主库上去 ##-b test1 为数据库名 mysqlbinlog -b test1 --start-position=65428 mysql-bin.000002 >test.sql scp test.sql root@192.168.11.41:~/ ###########3.在新主库中导入test.sql文件 msyql -e "source /root/test.sql" ##########检查数据恢复情况 mysql -e "select * from test.student;" #######################宕机主库恢复 ###1。 mysql -e "stop slave; reset slave; reset master;" #####2。 ####在/etc/my.cnf [mysqld]下面添加一行 read-only=1 sed -i '/\[mysqld\]/ a read-only=1' /etc/my.cnf /etc/init.d/mysqld restart #########3 ##MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=149976, 为新主库中查到的 文件和节点 mysql -e "stop slave; reset slave; CHANGE MASTER TO MASTER_HOST='192.168.11.41', MASTER_USER='repl', MASTER_PASSWORD='replpwd', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=149976, MASTER_CONNECT_RETRY=10; start slave;" mysql -e 'show slave status\G;' |grep Slave