码迷,mamicode.com
首页 > 数据库 > 详细

Mysql主从同步

时间:2018-01-27 00:36:32      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:val   backend   page   读写   创建   执行   scale   修改   服务器   

1 mysql主从同步

1.1主数据库配置:

环境:准备两台机器,一台作为主数据库,一台作为从数据库

(1)用户授权

mysql> grant  replication  slave on *.*  to  用户名@"从服务器地址"

identified by "密码";

(2)启用binlog日志

vim  /etc/my.cnf

server_id=54

log-bin=master54

binlog-format="mixed"

(3)重启数据库服务器

systemctl restart mysqld

ls /var/lib/mysql/master54.*

/var/lib/mysql/master54.000001  /var/lib/mysql/master54.index

(4)查看正在使用binlog日志文件。

# mysql -uroot -p123456

mysql> show  master  status;

1.2 从服务器配置

(1)显示自己是否是从数据库服务器

mysql> show slave status;

(2)测试主库授权的用户是否有效

#mysql  -h192.168.4.54  -uyaya  -p123456

mysql> show grants;

(3)修改配置文件指定server_id

#vim /etc/my.cnf

[mysqld]

server_id=55

#sync-binlog=1 #允许日志同步

#read_only=1  #只读模式

重启:systemctl  restart  mysqld

(4)在本机数据管理员登录主库信息

mysql> change master  to

    -> master_host="192.168.4.54",

    -> master_user="yaya",

    -> master_password="123456",

    -> master_log_file="master54.000001",

-> master_log_pos=数字; #查看主的Position(偏移位置)

(5)开启从服务

mysql> start slave;

mysql> show slave status\G;

            Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

必须保证Slave_IO,Slave_SQL的状态为yes。如果不是,查看如下配置文件:

[root@ser55 ~]# vim /var/lib/mysql/auto.cnf

(6)验证主从同步配置:结果

客户端连接主库服务器 产生的新数据,在从角色的主机上都能够查看到。

1.3 工作原理

从角色主机的数据库目录下会多出如下文件:

master.info  #存储主数据库的信息

slave55-relay-bin.XXXXXX   

#中继日志文件(二进制文件,使用mysqlbinlog查看)

slave55-relay-bin.index #中继文件索引

relay-log.info   #记录当前数据库服务器使用的中继日志文件

IO线程的作用:把主库的binlog日志内容记录到本机的relay-log日志里

SQL线程的作用:执行本机中继(relay-log)日志的sql命令,把数据写到本机的库。

mysql > show processlist;

Binlog Dump 把binlog的日志通过IO线程发给从库,从库通过SQL命令执行日志的语句,达到与主的数据库一致。

1.4 主从排错

IO线程报错:从库指定主库的信息错误

安全限制(selinux,firewall)

查看Last_IO_Error的报错信息

哪一项错误就改哪一项,change master to

SQL线程报错:

执行中继日志里的sql命令时,从库的库或者表不存在

查看报错信息:

Last_SQL_Error: 报错信息

mysql> stop  slave;  (reset slave)

在从本机有命令操作的库或表

mysql> start  slave;

1.5 让从数据库临时不同步主库的数据

mysql> stop slave;

把从库还原成独立的数据库

rm -rf master.info  relay-bin.*  relay-log.info

1.6 主从同步常用配置参数:

主数据服务器使用的参数

[mysqld]

binlog_do_db=db1,db2      #只允许Master对哪些库记日志

binlog_ignore_db=db1,db2   #只不允许Master对哪些库记日志

从数据服务器使用的参数

[mysqld]

log_slave_updates      允许级联复制(主从从)

replicate_do_db=db1,db2(数据库库名)  只同步库1和库2

replicate_ignore_db=db1,db2            只不同步库1和库2

relay_log=名 指定中继日志文件名


2 读写分离

2.1 配置读写分离

2.11 环境:基于主从

一台机器作为主数据库,一台为从数据库,一台为Mysql代理

2.12 为什么要做读写分离:

减轻服务器的并发访问压力同时提高硬件利用率。

2.13 配置maxscale

在mysql代理上配置

(1)装包

[root@ser53 ~]# rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm

[root@ser53 ~]# rpm -qc  maxscale

/etc/maxscale.cnf.template

(2)配置文件说明

vim /etc/maxscale.cnf

[maxscale]      #服务名称

threads=1      #(=auto自动的)线程数,默认为1,不改动

[server1]        #调用服务器的名称,指定ip地址对应的名字

type=server

address=192.168.4.54  #主数据库服务器ip地址

port=3306              #端口

protocol=MySQLBackend

[server2]

type=server

address=192.168.4.55

port=3306

protocol=MySQLBackend

 

[MySQL Monitor]      #指定要监控的主机 和监控时连接的用户

type=monitor

module=mysqlmon

servers=server1,server2

user=scalemon       #监控数据库服务服务的运行状态和主从状态的用户

passwd=123456

monitor_interval=10000

 

#[Read-Only Service]  #只读服务,不需要使用,注释掉

#type=service

#router=readconnroute

#servers=server1

#user=myuser

#passwd=mypwd

#router_options=slave

 

[Read-Write Service]      #定义读写分离服务器列表

type=service

router=readwritesplit

servers=server1,server2    #前边定义的主机名

user=maxscale    

#检查接收客户端连接请求时,连接的用户名和密码在数据库服务器上是否存在

passwd=123456           #密码

max_slave_connections=100%

 

[MaxAdmin Service]

type=service

router=cli

 

#[Read-Only Listener]

#type=listener

#service=Read-Only Service

#protocol=MySQLClient

#port=4008

 

[Read-Write Listener]

type=listener

service=Read-Write Service

protocol=MySQLClient

port=4006

[MaxAdmin Listener]

type=listener

service=MaxAdmin Service

protocol=maxscaled

socket=default

port=4010   #admin的监听端口

2.14 根据配置文件的设置在数据库服务器添加对应的授权用户。

(只在主服务器授权即可 从服务器会自动同步)

mysql> grant replication slave, replication client on *.*

to scalemon@'%'  identified by “123456”;  #创建监控用户

mysql> grant select on mysql.* to maxscale@'%' identified

by “123456”;  #创建路由用户

mysql> grant all  on *.*  to  student@'%' identified by “123456”;

#创建客户端访问用户

2.15 启动maxscale服务

maxscale --config=/etc/maxscale.cnf

或者maxscale -f /etc/maxscale.cnf

netstat -utnalp | grep maxscale

kill -9 pid号       #通过杀进程的方式停止服务

[root@ser53 ~]# ps -C maxscale

2.16 测试

[root@ser52 ~]# mysql -ustudent -p123456  -h192.168.4.53 -P4006

写入一条数据,此时在主数据库上能查看到,在从服务器上也能查到,说明在主服务器上进行写操作。

[root@ser53 ~]# maxadmin -P4010 -uadmin -pmariadb #进入管理

MaxScale> list servers   #查看服务器列表状态

可以在从服务器上数据库内写数据,而此时主数据库并没有从库写入数据的信息,从其它客户端访问mysql代理,去查看数据库内的内容,如果能查到写的数据,就能确定在从库上查看。





Mysql主从同步

标签:val   backend   page   读写   创建   执行   scale   修改   服务器   

原文地址:http://blog.51cto.com/13452945/2065674

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!