这里用到了前面的innobackupex:http://www.javashuo.com/article/p-smiiyqpq-ca.htmlphp
mysqldump对于导出10G如下的数据库或几个表,仍是适用的,并且更快捷。一旦数据量达到100-500G,不管是对原库的压力仍是导出的性能,mysqldump就力不从心了。Percona-Xtrabackup备份工具,是实现MySQL在线热备工做的不二选择,可进行全量、增量、单表备份和还原。(但当数据量更大时,可能须要考虑分库分表,或使用 LVM 快照来加快备份速度了)mysql
2.2版本 xtrabackup 能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份,innobackupex经过perl封装了一层xtrabackup,对MyISAM的备份经过加表读锁的方式实现。2.3版本 xtrabackup 命令直接支持MyISAM引擎。nginx
XtraBackup(包含innobackupex)优点 :sql
show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: No 可见是Slave不一样步
方法一:忽略错误后,继续同步
该方法适用于主从库数据相差不大,或者要求数据能够不彻底统一的状况,数据要求不严格的状况 解决:
stop slave;
#表示跳过一步错误,后面的数字可变
set global sql_slave_skip_counter =1;
start slave;
以后再用mysql> show slave status\G 查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes 数据库
方法二:厉害了从新搞一遍,主要是数据的同步该方法适用于主从库数据相差较大,或者要求数据彻底统一的状况 服务器
1.两台mysql均可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另外一台(masterB)备用;架构
2.masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;ide
3.两台主库之间作高可用,能够采用keepalived等方案(使用VIP对外提供服务);工具
4.全部提供服务的从服务器与masterB进行主从同步(双主多从);性能
5.建议采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式);
这样作能够在必定程度上保证主库的高可用,在一台主库down掉以后,能够在极短的时间内切换到另外一台主库上(尽量减小主库宕机对业务形成的影响),减小了主从同步给线上主库带来的压力;
可是也有几个不足的地方:
1.masterB可能会一直处于空闲状态(能够用它当从库,负责部分查询);
2.主库后面提供服务的从库要等masterB先同步完了数据后才能去masterB上去同步数据,这样可能会形成必定程度的同步延时;
masterA自增加ID: vi /etc/my.cnf server-id = 1 auto_increment_offset = 1 auto_increment_increment = 2 #奇数ID log-bin = mysql-bin #打开二进制功能,MASTER主服务器必须打开此项(双主) log-slave-updates = true #将复制事件写入binlog,一台服务器既作主库又作从库此选项必需要开启 masterB自增加ID: vi /etc/my.cnf server-id = 2 auto_increment_offset = 2 auto_increment_increment = 2 #偶数ID log-bin = mysql-bin #打开二进制功能,MASTER主服务器必须打开此项 log-slave-updates = true
添加主从同步帐户
masterA上: mysql> grant replication slave on *.* to 'repl'@'192.168.10.12' identified by '123456'; mysql> flush privileges; masterB上: mysql> grant replication slave on *.* to 'repl'@'192.168.10.11' identified by '123456'; mysql> flush privileges; 查看主库的状态 masterA上: mysql> show master status; masterB上: mysql> show master status;
配置同步信息
masterA上: mysql> change master to master_host='192.168.10.12',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=437; mysql> start slave; mysql> show slave status\G; 显示有以下状态则正常: Slave_IO_Running: Yes Slave_SQL_Running: Yes masterB上: #本人是测试环境,能够保证没数据写入,不然须要的步骤是:先masterA锁表-->masterA备份数据-->masterA解锁表 -->masterB导入数据-->masterB设置主从-->查看主从 复制代码 mysql> change master to master_host='192.168.10.11',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=120; start slave; mysql> show slave status\G; 显示有以下状态则正常: Slave_IO_Running: Yes Slave_SQL_Running: Yes
一、安装lua (mysql-proxy须要使用lua脚本进行数据转发) #tar zxvf lua-5.1.4.tar.gz #cd lua-5.1.4 #vi Makefile,修改INSTALL_TOP= /usr/local/lua #make posix #make install 二、安装libevent #tar zxvf libevent-2.0.8-rc.tar.gz #cd libevent-2.0.8-rc #./configure --prefix=/usr/local/libevent #make && make install 三、安装check #tar zxvf check-0.9.8.tar.gz #cd check-0.9.8 #./configure && make && make install 四、安装mysql客户端 #tar zxvf mysql-5.0.92.tar.gz #cd mysql-5.0.92 #./configure --without-server && make && make install 五、设置环境变量 (安装mysql-proxy所需变量) #vi /etc/profile export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm" export CPPFLAGS="-I/usr/local/libevent/include" export CFLAGS="-I/usr/local/libevent/include" # source /etc/profile 六、安装mysql-proxy #tar zxvf mysql-proxy-0.6.0.tar.gz #cd mysql-proxy-0.6.0 # ./configure --prefix=/usr/local/mysql-proxy --with-mysql --with-lua #make && make install 七、启动mysql-proxy 本次对两台数据库实现了读写分离;mysql-master为可读可写,mysql-slave为只读 #/usr/local/mysql-proxy/sbin/mysql-proxy --proxy-backend-addresses=192.168.1.201:3306 --proxy-read-only-backend-addresses=192.168.1.202:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua & 注:若是正常状况下启动后终端不会有任何提示信息,mysql-proxy启动后会启动两个端口4040和4041,4040用于SQL转发,4041用于管理mysql-proxy。若有多个mysql-slave能够依次在后面添加