By Rui
本系列主题是数据库高可用方案,从MySQL出发,遍历rdbms,再过渡到非关系型数据库。
关系型数据库的研究范围:
MySQL Replication是MySQL保持数据冗余的一种方式,常用的结构有Master-Slave,Multi-Master,Multi-Source几种方式。
如果Master发生故障,可以立刻将一台Slave切换成Master,Replicaiton则是这个过程的基础,但故障转移还是要结合一个管理层来完成,比如ZooKeeper、Keepalive。
我们先从最简单的master-slave开说。OS用的Ubuntu 14.04。
#安装环境
安装 java,maven
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
设置默认 jdk
sudo update-alternatives --config java
配置 Java Home 编辑 ~/.bashrc
JAVA_HOME=/usr/lib/jvm/java-7-oracle
export JAVA_HOME
PATH=$PATH:$JAVA_HOME
export PATH
安装mysql最新版本
download deb file at http://dev.mysql.com/downloads/repo/apt/
wget http://dev.mysql.com/get/mysql-apt-config_0.7.2-1_all.deb
sudo dpkg -i mysql-apt-config_0.7.2-1_all.deb
sudo apt-get update
sudo apt-get install mysql-server
配置简单的主从
在server 1端
sudo su
vi /etc/mysql/my.cnf
修改 my.cnf
[mysqld]
log-bin = mysql-bin
server-id = 1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
binlog_do_db = logdb
comment the following line
bind-address = 127.0.0.1
保存 my.cnf
重启
service mysql restart
进入mysql shell
mysql -u root -proot
创建远程连接用户
mysql> create user 'replic'@'%' identified by 'replicpassword';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replic'@'%' IDENTIFIED BY 'replicpassword';
先锁住log
mysql> FLUSH TABLES WITH READ LOCK;
记录结果binlon
mysql> SHOW MASTER STATUS;
解锁
mysql> unlock tables;
在server2上
修改my.cnf
sudo su
vi /etc/mysql/my.cnf
修改以下行
server-id = 2
log-bin = mysql-bin
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
binlog_do_db = logdb
注释掉下一句
bind-address= 127.0.0.1
保存
重启
service mysql restart
进入mysql shell
mysql -u root -proot
根据server1 status里的信息在server2端配置master
mysql> stop slave;
mysql> change master to master_host = '172.16.13.211', master_user = 'replic', master_password = 'replicpassword', master_log_file = '之前在server1中记录的log file', master_log_pos = 在server1记录的log编号;
mysql> start slave;
- 完成