一、概要说明
数据库读多写少,主库负责写,从库负责读。一主多从,从而解决读多写少。mysql
宕机时将选择pos最大的从库做为新的主库,其他从库继续担任本身的职责。sql
二、Mysql备份原理
简单的说就是把 一个服务器上执行过的sql语句在别的服务器上也重复执行一遍。数据库
主服务器master记录数据库操做日志到Binary log,从服务器开启i/o线程将二进制日志记录的操做同步到relay log(存在从服务器的缓存中),另外sql线程将relay log日志记录的操做在从服务器执行。vim
三、具体步骤
(1)须要环境缓存
系统:CentOS服务器
软件包:mysql-5.6.22.tar.gzapp
master服务器:192.168.*.*测试
slave服务器1:192.168.*.*ui
slave服务器2:192.168.*.*spa
(2)修改主库服务器配置
vim/etc/f
在主服务器master上配置开启Binary log,主要是在[mysqld]下面添加:
server-id=1
log-bin=master-bin
log-bin-index=ma
修改slave服务器1配置
vi /etc/f
[mysqld]
log-bin=mysql-bin #可选项,启用二进制日志,但是主库宕机后升级从库为主库时仍然须要设置,因此如今一块儿启用也能够
server-id=102 #必选项,服务器惟一ID
replicate-do-db=mydb #可选项,须要同步的数据库名,不写本行表示同步全部的数据库ster
-bin
.index
如图:
(3)重启mysql服务
service mysql restart
(4)修改slave服务器1配置
vi /etc/f
[mysqld]
log-bin=mysql-bin#可选项,启用二进制日志,但是主库宕机后升级从库为主库时仍然须要设置,因此如今一块儿启用也能够
server-id=102#必选项,服务器惟一ID
replicate-do-db=mydb#可选项,须要同步的数据库名,不写本行表示同步全部的数据库
其余从库,一样的配置。
(5)重启新配置的从服务器
service mysql restart
(6)检查主从库配置效果
主库:mysql> SHOW MASTER STATUS;
应输出以下:
从库:mysql>show slave status\G;
#如下是部分结果
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event#从库状态,已连上主库
Master_Host: 192.168.1.112#master地址
Master_User: mymaster#master用户
Master_Port: 3306#master端口
Connect_Retry: 60#重试时间,默认是60秒
Master_Log_File: mysql-bin.000001#master的binlog文件名
Read_Master_Log_Pos: 1556#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Slave_IO_Running: Yes#必须为Yes,此线程把master段的日志写到本地
Slave_SQL_Running: Yes#必须为Yes,此线程把写到本地的日志应用于数据库
Replicate_Do_DB:#同步数据库名(若是有)
Replicate_Ignore_DB:#忽略数据库名(若是有)
Exec_Master_Log_Pos: 1556#执行同步命令的位置
Last_IO_Errno: 0#最近IO出错位置
Last_IO_Error:#最近IO出错信息
Last_SQL_Errno: 0#最近SQL出错位置
Last_SQL_Error:#最近SQL出错信息
Master_Server_Id: 112#master服务器ID
Master_Info_File: /data/mysqldb/master.info#master.info文件位置,位于该slave中
1 row in set (0.00 sec)
若是Slave_IO_Running和Slave_SQL_Running均为Yes,则slave配置完成
(7)接下来配置个数据库的关联
a、首先咱们先创建一个操做主从同步的数据库用户,切换到主数据库执行:
mysql> create user repl;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从xxx.xxx.xxx.xx' IDENTIFIED BY 'mysql';
mysql> flush privileges;
1
2
3
这个配置的含义就是建立了一个数据库用户repl,密码是mysql, 在从服务器使用repl这个帐号和主服务器链接的时候,就赋予其REPLICATION SLAVE的权限, *.* 表面这个权限是针对主库的全部表的,其中xxx就是从服务器的ip地址。
b、进入全部从数据库后执行:
mysql> change master to master_host='主xxx.xxx.xxx.xx',master_port=3306,master_user='repl',master_password='mysql',master_log_file='master-bin.000001',master_log_pos=0;
1
这里面的xxx是主服务器ip,同时配置端口,repl表明访问主数据库的用户,上述步骤执行完毕后执行start slave启动配置:
mysql> start slave;
(8)主从服务器测试
在master中建立数据库,建立表,进行增删改操做都会被同步到全部slave中,这就说明配置成功啦。
4、主库宕机解决
假设发生了突发事件,master宕机,如今的需求是要将192.168.1.102提高为主库,另一个为从库
步骤:
1.确保全部的relay log所有更新完毕,在每一个从库上执行:
stop slave io_thread;
show processlist;
直到看到Has read all relay log,则表示从库更新都执行完毕了
2.登录全部从库,查看master.info文件,对比选择pos最大的做为新的主库,这里咱们选择192.168.1.102为新的主库
3.登录192.168.1.102,执行stop slave;
并进入数据库目录,删除master.info和relay-log.info文件, 配置f文件,开启log-bin,若是有log-slaves-updates和read-only则要注释掉,执行reset master
4.建立用于同步的用户并受权slave,同第3.7步骤
5.登陆另一台从库,执行stop slave中止同步
6.根据第3.7步骤链接到新的主库
7.执行start slave;
8.修改新的master数据,测试slave是否同步更新