mysql主从复制

本文为转载:

转载的价值在于文本的最后一个小的处理方式,可以借鉴,当然也可以看一下这个完整的配置,也是可以的

**方案介绍**1:http://baijiahao.baidu.com/s?id=1598186201849829616&wfr=spider&for=pc
2:https://www.cnblogs.com/cmyxn/p/8026565.html

mysql主从复制的原理:

master有一个io线程,slave有一个sql线程和io线程。
master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志中记录这些改变,即使事务是交叉执行的,
也会串行的写入二进制日志,在事务写入二进制日志完成后,master将通知存储引擎提交事务
slave将master的二进制日志拷贝到自己的中继日志。slave会开启一个io线程,io线程从master的二进制日志中读取事件,
并将这些事件写入中继日志,如果已经跟上master,它会睡眠等待master产生新的事件。
slave从中继日志读取事件,并执行日志记载的事务而更新slave的数据,使其与master的数据一致。

如何配置:

为准备主从复制,需要主服务器激活二进制日志功能,并且从服务器应该具备连接主服务
和主服务器把二进制日志传输给它的权限。
首先,在主服务器给从服务器创建复制账号:
建立一个帐户backup,并且只能允许从10.100.0.200这个地址上来登陆,密码是1234
GRANT REPLICATION SLAVE,RELOAD,SUPER ON . TO backup@’10.100.0.200’ IDENTIFIED BY ‘1234’;

然后,修改master的配置文件,包括打开二进制日志,服务器id
server-id=1
log-bin=mysql-bin 开启日志文件
max_binlog_size = 500M 每个日志文件的大小
binlog-do-db = adb 需要同步的数据库名字
log-slave-updates
binlog_format=”MIXED” 设置bin-log日志文件格式为:MIXED
expire_logs_day=2 设置bin-log日志文件保存的天数

然后配置从服务器,包括打开二进制日志,打开中继日志
log_bin = mysql-bin
server_id= 2
relay_log = mysql-relay-bin
log_slave_updates = 1

配置主机并开启从服务器复制功能
查看主机151状态:master:SHOW MASTER STATUS \g;
在152从机上面执行:
change master to
master_host=’192.168.1.151’,
master_user=’root’,
master_password=’root’,
master_port=3306,
master_log_file=’bin-log.003’,这个和下面的值要根据SHOW MASTER STATUS记载的值来设定
master_log_pos=4;
start slave;

mysql支持的复制类型

语句的复制:二进制文件复制到中继文件时,在500M大小的文件末尾,按照语句;来复制
行的复制:把500M二进制文件整个复制
混合类型:默认使用语句复制,再不精确时用行复制

mysql主从复制数据不一致的原因以及解决办法
由于mysql的主从复制是网络传送二进制文件,网络延迟是主从不同步的绝大多数原因
怎么排查:
查看进程是否sleep太多了
查看主进程的状态

怎么解决:

先进入主库,进行锁表:flush tables with read lock
数据备份:mysqldump -uroot -p -hlocalhost > mysql.bak.sql
查看master状态:show master status;
把mysql备份文件传到从服务器:scp mysql.bak.sql root@192.168.128.101:/tmp/
停止从库:stop slave;
然后到从库执行mysql命令,导入数据备份 mysql> source /tmp/mysql.bak.sql
设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项
change master to master_host = ‘192.168.128.100’, master_user = ‘rsync’, master_port=3306, master_password=”, master_log_file = ‘mysqld-bin.000001’, master_log_pos=3260;
重新开启从同步 mysql> start slave;
查看同步状态 mysql> show slave status\G 查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
好了,同步完成啦。

https://blog.csdn.net/ActionTech/article/details/80843598的bug处理也可以进行参考


以下为一套比较清晰的一套流程也为参考内容

mysql主从配置环境。

  主数据库所在的操作系统:win7

  主数据库的版本:5.0

  主数据库的ip地址:192.168.1.111

  从数据库所在的操作系统:linux

  从数据的版本:5.0

  从数据库的ip地址:192.168.1.112

配置步骤:

  1、确保主数据库与从数据库一模一样。

    例如:主数据库里的a的数据库里有b,c,d表,那从数据库里的就应该有一个模子刻出来的a的数据库和b,c,d表

  2、在主数据库上创建同步账号。

    GRANT REPLICATION SLAVE,FILE ON . TO ‘mstest’@’192.168.1.112’ IDENTIFIED BY ‘123456’;

    192.168.1.112:是运行使用该用户的ip地址

    mstest:是新创建的用户名

    123456:是新创建的用户名的密码

    以上命令的详细解释,最好百度一下,写太多反到更加更不清思路。

  3、配置主数据库的my.ini(因为是在window下,所以是my.ini不是my.cnf)。

    [mysqld]

    server-id=1
    log-bin=log
    binlog-do-db=mstest //要同步的mstest数据库,要同步多个数据库,就多加几个replicate-db-db=数据库名

    binlog-ignore-db=mysql //要忽略的数据库

  4、配置从数据库的my.cnf。
    [mysqld]

    server-id=2
    master-host=192.168.1.111
    master-user=mstest   //第一步创建账号的用户名
    master-password=123456 //第一步创建账号的密码
    master-port=3306
    master-connect-retry=60
    replicate-do-db=mstest //要同步的mstest数据库,要同步多个数据库,就多加几个replicate-db-db=数据库名
    replicate-ignore-db=mysql  //要忽略的数据库 
  5、验证是否成功

    进入mysql,后输入命令:show slave status\G。将显示下图。如果slave_io_running和slave_sql_running都为yes,那么表明可以成功同步了

  6、测试同步数据。

    进入主数据库输入命令:insert into one(name) values(‘beijing’);

    然后进入从数据库输入命令:select * from one;

    如果此时从数据库有获取到数据,说明同步成功了,主从也就实现了
    
https://www.cnblogs.com/sustudy/p/4174189.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值