龙空技术网

MYSQL主从同步介绍及搭建

VC1212138 957

前言:

现时看官们对“mysql建库用户”大概比较重视,看官们都需要剖析一些“mysql建库用户”的相关内容。那么小编也在网摘上搜集了一些关于“mysql建库用户””的相关知识,希望咱们能喜欢,看官们一起来学习一下吧!

一、什么是mysql主从同步

指具有2台或2台以上的数据库服务器,一台作为主数据库服务器,其他作为从数据库服务器。

主:正在被客户端访问的数据库服务器,被称作主库服务器。

从:自动同步主库上的数据的数据库服务器,被称作从库服务器。

作用:实现数据的自动备份

二、配置mysql主从同步(]#为在系统下执行命令,mysql>为在数据库模式下执行)

2.1环境准备:

1)数据库服务器 192.168.4.51 做主库

2)数据库服务器 192.168.4.52 做从库

3)禁用selinux

4)关闭防火墙服务

5)数据库正常运行,两台数据库服务器均可以从本机登录

6)2台服务器能互相通信(ping通)

7)从库上必须包含主库的数据,防止同步时出错

2.2配置主从同步

1)配置主库:

a.数据库模式下创建授权用户:

mysql> grant replication slave on *.*

-> to

-> repluser@"192.168.4.52"

-> identified by "123456";

b.通过配置文件启用binlog日志并重启服务

]# vim /etc/my.cnf

[mysqld]

server_id=51

log-bin=master51

binlog-format="mixed"

]# systemctl restart mysqld

]# ls /var/lib/mysql/master51.*

/var/lib/mysql/master51.000001 /var/lib/mysql/master51.index

c. 查看正在使用binlog日志信息

]#mysql -uroot -p123456

mysql> show master status;

d 相关命令

mysql> reset master;

//重置binlog日志,删除日志索引文件中记录的所有binlog日志并创建一个新的日志文件,起始值从000001开始,此命令不能用于有任何slave正在运行的主从关系的主库,因为在slave运行时刻reset master命令不被支持,用于第一次搭建主从数据库时,初始化binlog操作或没有搭建主从的情况下用于清理binlog文件;

2)配置从库

a 验证主库的用户授权

]# mysql -h192.168.4.51 -urepluser -p123456

mysql> show grants;

mysql> quit;

b 修改配置文件指定server_id并重启服务

]# vim /etc/my.cnf

[mysqld]

server_id=52

]# systemctl restart mysqld

c数据库管理员本机登录,指定主数据库服务器的信息

]#mysql -uroot -p123456

mysql> change master to

-> master_host="192.168.4.51",

-> master_user="repluser",

-> master_password="123456",

-> master_log_file="master51.000001", //值为主库正在使用的日志信息,不能照抄

-> master_log_pos=154; //值为日志信息当前记录到的偏移量,同样需要通过主库查看,不能照抄

d 启动slave进程

mysql> start slave;

e查看进程状态信息(保证IO与SQL运行状态为yes)

mysql> show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

f常用相关命令

mysql> show slave status; # 显示从库状态信息

mysql> show master status; #显示本机的binlog日志文件信息

mysql> show processlist; #查看当前数据库服务器上正在执行的程序

mysql> start slave ; #启动slave 进程

mysql> stop slave ; #停止slave 进程

3)在客户端测试主从同步配置

a 在主库服务器上添加访问数据时,使用连接用户

]# mysql -uroot -p123456

mysql> grant all on bbsdb.* to webadmin@"%" identified by "123456";

mysql>select user,host from mysql.user where user="webadmin";

mysql> quit;

b 客户端使用主库的授权用户,连接主库服务器,建库表插入记录

]# mysql -h192.168.4.51 -uwebadmin -p123456

mysql> 建库 建表 插入记录

c 在从库本机,使用管理登录查看是否有和主库一样库表记录及授权用户

]# mysql -uroot -p123456

mysql> select * from 库.表;

d 客户端使用主库的授权用户,连接从库服务器,也可以看到新建的库表及记录

]# mysql -h192.168.4.52 -uwebadmin -p123456

mysql> select * from 库.表;

三、主从同步工作原理

3.1原理解释

1)首先主库开启了binlog日志功能,当主库执行sql指令时,会被记录到binlog日志;

2)其次主库授权从库指定用户具有同步主库数据的权限(即从主服务器读取二进制日志的权限replication slave),因此从库可以查看主库的binlog日志;

3)当搭建了主从同步之后,从数据库会产生2个线程,分别是I/O线程以及sql线程以便同步主库的操作;

4)I/O线程会将主数据库的binlog日志的内容复制到数据库目录下的中继日志relay_log里;

5)然后sql线程会将中继日志里所记录的sql指令进行执行,使得从数据库将执行与主数据库相同的操作,最终实现主数据库的数据与从数据库的数据相同。

3.2从库数据库目录下的解释:

搭建主从同步后,从库数据库目录下会有如下文件:

1)master.info 记录主库信息

2)主机名-relay-bin.XXXXX 中继日志文件,记录主库上执行过的sql命令

3)主机名-relay-index 索引文件,记录当前已有的中继日志信息

4)relay-log.info 中继日志文件,记录当前使用的中继日志信息

ps:要想把从库恢复成独立的数据库服务器,只需要停止服务后把以上文件删除再重启服务即可。

3.3配置文件内容解释

主库配置文件:

server_id=51 //指定主库的服务器id号

log-bin=master51 //启用binlog日志,并将日志名设为master51开头,日志名可省略

binlog-format="mixed" //设置binlog日志记录格式为mixed

从库配置文件:

server_id=52 //指定主库的服务器id号

3.4 步骤及思路小结

1)由于同步只能同步搭建后的数据,因此构建主从同步之前要确保数据相同,即从库必须要有主库上的数据;

2)为了能够同步主库的数据,需要授权用户具有查看binlog日志权限并复制到中继日志上;

3)从库指定主库信息时,要从主库上查看当前使用的binlog日志信息。

4)怎么才知道主库的日志改变了呢 ?

在主库上有名为binlogdump的程序告诉从库有新的命令记录到数据库里了,你要去提取。

5)replication slave 为全局权限,不能指定范围,只能*.*,除非修改主从库运行时的配置参数

3.5常见报错原因

1)IO线程报错原因: 从库连接主库失败(ping grant firewalld selinux)

从库指定主库的日志信息错误(日志名 偏移量)

Last_IO_Error: 报错信息

修改步骤:

mysql> stop slave;

mysql> change master to 选项="值";

mysql> start slave;

2)SQL线程报错原因: 执行本机中继日志文件里的sql命令,用到库或表在本机不存在。

Last_SQL_Error: 报错信息

改错原理:从库上修改,主库不会变

改错方法:

让当前从库临时不同步主库:

在从库上将slave停掉;stop slave;

重新开启会将之前的数据同步回来

3)其他相关:配置主从数据库,数据库的uuid值不可以一样,可以手动改auto.cnf文件,保持长度不变,改一下值再重启;

3.6其他相关的常用配置文件参数

1)适用于主库master服务器

binlog_do_db=库名 //设置master对哪些库记日志

binlog_ingore_db=库名 //设置master对哪些库不记

2)适用于从库slave服务器

log_slave_updates //记录从库更新,允许链式复制(多用于主从从结构),即使从库开启了binlog日志模式,默认从库执行中继日志的sql命令也不会记录到从库的binlog日志下;

relay_log=dbsvr2-relay-bin //指定中继日志文件名

replicate_do_db=mysql //仅复制指定的库,其他库将被忽略,此选项可设置多条,省略时默认为所有库;

replicate_ignore_db=test //不复制哪些库,其他库将被复制,此选项与do_db只需选用其中一种;

3)选项设置在主库与从库的区别

若设置在主库,设置则对所有的从库生效;

若设置在从库,则设置只对当前的从库生效;

主要体现在一主多从结构。

四、mysql主从同步结构模式

4.1基本模式:

单向复制:主-->从

缺点:单点故障,从库坏了就停止备份数据了

4.2 扩展模式:

链式复制:主-->从-->从 (第一个从库同时兼为第二个从库的主库)

优点:主库坏了,还有备用的主库进行接替,缺点同单向复制,有单点故障

双向复制:主<-->从 (互为主从)

放射式复制:一主多从(一个主库下接多个从库)

优点:解决了单向复制的单点故障问题

4.3配置主从从结构

步骤同主从同步一样,只需要在既做主库又做从库的服务器配置文件上开启binlog日志并添加log_slave_updates

4.4主主结构(互为主从)用途:客户端访问51时,52为从库;客户端访问52时,51为从库;生产环境下一般不单独用,防止51,52被同时访问导致不可用,多与第三方软件一起用于部署高可用集群,

五、mysql复制模式

5.1模式分类

1)异步复制:主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接收并处理

2)全同步复制:当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端

3)半同步复制:介于异步复制和全同步复制之间,主客在执行完客户端提交的事务后不时立刻返回给客户端,而是等待至少一个从库接收到并写道relay log中才返回给客户端。

5.2配置半同步复制

临时配置:

查看是否可以动态加载模块

mysql> show variables like "have_dynamic_loading";

主库安装的模块

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

从库安装的模块

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

查看系统库下的表,模块是否安装成功

mysql>

SELECT PLUGIN_NAME , PLUGIN_STATUS

FROM INFORMATION_SCHEMA.PLUGINS

WHERE

PLUGIN_NAME LIKE '%semi%';

启用半同步复制模式

主库

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

从库

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

查看半同步复制模式是否启用

mysql> show variables like "rpl_semi_sync_%_enabled";

永久配置:

主库

vim /etc/my.cnf

[mysqld]

plugin-load=rpl_semi_sync_master=semisync_master.so //加载插件

rpl_semi_sync_master_enabled=1 //启用模块

从库

vim /etc/my.cnf

[mysqld]

plugin-load=rpl_semi_sync_slave=semisync_slave.so

rpl_semi_sync_slave_enabled=1

当数据库既做主又做从库时,配置如下:

vim /etc/my.cnf

[mysqld]

plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

rpl-semi-sync-master-enabled = 1

rpl-semi-sync-slave-enabled = 1

标签: #mysql建库用户 #mysql51怎样