您的位置:首页 > 运维架构 > 网站架构

MySQL 高可用:主从复制

2016-04-08 22:02 405 查看


# ps -ef | grep mysql
# ln -s /usr/local/mysql/mysql.sock /tmp/mysql.sock
# select Host,User,Password from mysql.user;

###########################################################################################

linux:	CentOS 5.6
mysql:	5.6.22
MASTER:	centos152(192.168.1.152)
SLAVE:	centos153(192.168.1.153)

###########################################################################################
#测试数据
# DROP TABLE IF EXISTS `userlog`;

CREATE TABLE `userlog` (
id int primary key auto_increment,
`username` varchar(50) NOT NULL default '0',
`user_id` mediumint(8) NOT NULL default '0',
`time` datetime NOT NULL default '0000-00-00 00:00:00',
`result` tinyint(1) NOT NULL default '0',
`ip` varchar(40) NOT NULL default '',
KEY `username` (`username`),
KEY `user_id` (`user_id`)
) auto_increment= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into `userlog` (`username`,`user_id`,`time`,`result`,`ip`)
values(default,default,default,default,default);

SELECT * FROM `userlog`;

###########################################################################################
#master 主服务器配置:
[root@centos152 ~]# vi /etc/my.cnf

[mysqld]
basedir =/usr/local/mysql
datadir =/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
port = 3306
server_id = 1 #注意每台服务server_id都不同
log-bin= mysql-bin #主库启用二进制日志
#relay_log=mysql-relay-bin #重播日志不需要
binlog_format = row
read-only=0
binlog-ignore-db=mysql

###########################################################################################
#slave 备服务器配置:
[root@centos153 ~]# vi /etc/my.cnf

[mysqld]
basedir =/usr/local/mysql
datadir =/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
port=3306
server_id=2
#log-bin= mysql-bin #二进制日志可不需要
relay_log=mysql-relay-bin #从库指定重播日志
binlog_format = row
read-only=1
binlog-ignore-db=mysql

###########################################################################################

mysql复制主要三种方式(binlog_format 二进制日志格式也有对应三种):
基于SQL语句的复制(statement-based replication, SBR)	: binlog_format = statement
基于行的复制(row-based replication, RBR)			: binlog_format = row
混合模式复制(mixed-based replication, MBR)			: binlog_format = mixed

###########################################################################################

#配置 my.cnf 后 master 和 slave 重启mysqld服务
[root@centos152 ~]# service mysqld restart

[root@centos153 ~]# service mysqld restart

#master:备份数据
[root@centos152 ~]# mysqldump -uroot -p --single-transaction --events --triggers --routines --flush-logs --master-data=2 --databases test > /tmp/test.sql

#master:备份远程传输到备用服务器153
[root@centos152 ~]# scp -r /tmp/test.sql root@192.168.1.153:/tmp

#slave:备库还原
[root@centos153 ~]# mysql -u root -p test< /tmp/test.sql

#master:添加访问帐号(slave:备库也可添加)
mysql> grant replication slave on *.* to 'replication'@'192.168.1.%' identified by '123456';
mysql> flush privileges;

#master:查看当前日志位置
#mysql> show master status \G;

#查看备份时的日志位置
[root@centos152 ~]# grep -i "change master" /tmp/test.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000013', MASTER_LOG_POS=120;

#slave:备库连接主库
mysql> STOP SLAVE;
mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.152',
MASTER_USER='replication',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000013',
MASTER_LOG_POS=120;
mysql> START SLAVE;

#slave:备库查看同步信息
mysql> show slave status \G;

若看到:Slave_IO_Running 和 Slave_SQL_Running 为 Yes ,则表示两个同步线程正常运行中。

###########################################################################################

#slave:跳过一条事务
mysql> STOP SLAVE;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> START SLAVE;

#slave:或者从下一个位置开始复制(跳过事务)
mysql> STOP SLAVE;
mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.152',
MASTER_USER='replication',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000013',
MASTER_LOG_POS=120;
mysql> START SLAVE;

###########################################################################################


上次参考:  MySQL 主从配置或主主(双主)配置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: