Mysql主从数据库配置及宕机处理

1、概要说明

                数据库读多写少,主库负责写,从库负责读。一主多从,从而解决读多写少。

                宕机时将选择pos最大的从库作为新的主库,其余从库继续担任自己的职责。

2、Mysql备份原理

    简单的说就是把 一个服务器上执行过的sql语句在别的服务器上也重复执行一遍。

    主服务器master记录数据库操作日志到Binary log,从服务器开启i/o线程将二进制日志记录的操作同步到relay log(存在从服务器的缓存中),另外sql线程将relay log日志记录的操作在从服务器执行。 

3、具体步骤

(1)需要环境

系统:CentOS

软件包:mysql-5.6.22.tar.gz

master服务器:192.168.*.*

slave服务器1:192.168.*.*

slave服务器2:192.168.*.*

(2)修改主库服务器配置

vim /etc/my.cnf

在主服务器master上配置开启Binary log,主要是在[mysqld]下面添加:

server-id=1
log-bin=master-bin
log-bin-index=ma

修改slave服务器1配置

vi /etc/my.cnf

[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/my.cnf

[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中,这就说明配置成功啦。

四、主库宕机解决

假设发生了突发事件,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文件, 配置my.cnf文件,开启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是否同步更新

猜你喜欢

转载自blog.csdn.net/qq_37465368/article/details/80819448