异步主从复制

 
主从部署步骤:
  • 备份还原
    • 使用mysqldump或者xtrabackup
    • 把主库现有基础数据还原到从库
  • 授权
    • grant replication slave on *.*
    • 给从库一个复制binlog的账号
  • 配置复制,并启动
    • 从库上配置复制信息,并指向master
  • 查看主从复制信息
    • show slave status \G
1)备份还原
主:101
从:100
a)主库备份
aiapple@ubuntu:~$ mysqldump -uroot -p --socket=/tmp/mysqldata/node1/mysql.sock --master-data --all-databases  > all_master.sql
--master-date:记录备份时binlog位置
aiapple@ubuntu:~$ cat all_master.sql | less --
-- Position to start replication or point-in-time recovery from
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=; --
-- Current Database: `db1`
--
b)从库还原
主库远程连接到从库,使用source还原
从库添加主库白名单:
mysql> grant all on *.* to root@192.168.1.101 WITH GRANT OPTION;  
设置密码:
mysql> set password for root@'localhost'=password('000000');
Query OK, 0 rows affected (0.00 sec)
主库添加从库白名单:
mysql> grant all on *.* to root@192.168.1.100 identified by '' with grant option;
主库登陆从库并还原数据:
aiapple@ubuntu:~$ mysql -uroot -p -h 192.168.1.100

mysql> source all_master.sql
2)赋权 replication slave
mysql> grant replication slave on *.* to repl@192.168.1.100 identified by 'repl';
Query OK, rows affected (0.00 sec)
 
3) 从库配置复制
#查看帮助信息
? change master to mysql> change master to MASTER_USER='repl';
Query OK, rows affected, warnings (0.03 sec) mysql> change master to MASTER_PASSWORD='repl';
Query OK, rows affected, warnings (0.02 sec) mysql> change master to MASTER_HOST='192.168.1.101';
Query OK, rows affected (0.03 sec) mysql> change master to MASTER_LOG_FILE='mysql-bin.000001';
 
4)启动:
mysql> start slave;
Query OK, rows affected (0.01 sec) mysql> show slave status\G; slave_io_running:yes
slave_sql_running:yes
#表示配置成功 mysql> show processlist;
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| | root | localhost | NULL | Query | | init | show processlist |
| | system user | | NULL | Connect | | Waiting for master to send event | NULL |
| | system user | | NULL | Connect | | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
 
注意:
  • 主从server_id应该不同;
  • 主从开启binlog日志
  • MASTER_LOG_FILE指定主库bin_log第一个文件;
 
半同步复制

 
 
配置mysql半同步复制 semi-sync
 
查看有哪些插件
show plugin

1.主从异步复制搭建

)主库全备,备库恢复
mysqldump -uroot -p123456 --socket=/data/mysql/node1/mysqld.sock --single-transaction -A --master-data= > all_db.sql
mysql -utest -ptest -h(从库IP) -P3306
mysql>source all_db.sql;
)主库授权用户
grant replication slave on *.* to repl@'(从库IP)' identified by 'repl';
)从库配置复制
less all_db.sql|grep "change master to"
change master to master_host='(主库IP)',master_user='repl',master_password='repl',master_log_file='XXX',master_log_pos=XXX;
start stave;
show slave status\G
)复制检验
主库:
use db1;
insert into t1 values();
从库:
use db1;
select * from t1;(获得数据)
主库:
drop database db2;
从库:
show databases;(显示db2被删除)
)查看线程
主库:show processlist;(dump线程)
从库:show processlist;(IO线程、SQL线程)
)查看日志
从库:cd /data/mysql/node1
cat master.info
cat relay-log.info
 
2.主从半同步复制安装
)主库安装插件
show plugins;
install PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
)从库安装插件
show plugins;
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
)参数设置
主库:
show variables like '%semi%';
SET GLOBAL rpl_semi_sync_master_enabled=;
从库:
SET GLOBAL rpl_semi_sync_slave_enabled=;
)重启主从复制
从库:
stop slave;
start slave;
)状态检查
show global status like '%semi%';
)复制检查
主库:
use db1;
insert into t1 values();
从库:
use db1;
select * from t1;(获得数据)
)测试延迟
从库:
stop slave;
主库:
use db1;
insert into t1 values();(被卡10s)
set global rpl_semi_sync_master_timeout=;(设置主等从时间1秒)
从库:
start slave;
stop slave;
主库:
use db1;
insert into t1 values();(被卡1s)
注意:rpl_semi_sync_master_timeout主库等待时间不能设置大,不然会引起主库雪崩效应;最好在1秒内;
 

并行复制

 
1.MySQL并行复制
#从库:
show variables like '%slave_par%';
set global slave_parallel_workers=; 设置sql线程数为10
#重启 slave
stop slave;
start slave;
#查看线程
show processlist;(十个worker线程)
注:实际上有11个线程,10worker线程,1个调度线程;
 
 
部分数据复制

 
部分数据复制:
在配置文件中设置
主库添加参数指定到库:
binlog_do_db=db1
binlog_ignore_db=db1
binlog_ignore_db=db2
 
或从库添加参数
可以到表;
replicate_do_db=db1
replicate_ignore_db=db1
replicate_do_table=db1.t1
replicate_wild_do_table=db%.%          #配置设置
replicate_wild_ignore_table=db1.%     #1打头的表
 
注:建议使用在从库添加参数,这样更加灵活可以指定到表级别;
 
部分复制
)主库:
create database db2;
)从库部分复制配置
配置文件中增加配置
#vim /data/mysql/my1.cnf(replicate_do_db=db2) 重启mysql
#mysqladmin -uroot --socket=XXX --port= -p123456 shutdown
#/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/my1.cnf & show slave status;
显示:replicate_do_db=db2 )测试
主库:
use db1;
delete from t1;
从库:
use db1;
select * from t1;(任然保留数据)
主库:
use db2;
create table user(a int,b int);
从库:
use db2;
show tables;(查看到user表)
 
联级复制

 
联级复制(A->B->C)
)从库:
#vim /data/mysql/my1.cnf(log_slave_updates)
#mysqladmin -uroot --socket=XXX --port= -p123456 shutdown
#/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/my1.cnf &
)创建新实例
在主库服务器上创建一个从库2实例
#mysqladmin -uroot --socket=XXX --port= -p123456 shutdown
#kill - (mysqld_safe进程号)
#cp -r node1 node2
#vim my.cnf(修改相关参数,端口3307)
#chown -R mysql.mysql node2
#/usr/local/mysql56/bin/mysqld_safe --defaults-file=/data/mysql/my1.cnf &
#/usr/local/mysql56/bin/mysqld_safe --defaults-file=/data/mysql/my2.cnf &
#mysqldump -utest -ptest -hXXX -P3306 -A --master-data= > d731.sql(dump从库1的全备)
#mysql -uroot --socket=/data/mysql/node2/mysqld.sock -p123456 < d731.sql
)配置从1和从2的主从
从1授权:
grant replication slave on *.* to repl@'(从2IP)' identified by 'repl';
从2配置复制:
less d731.sql|grep "change master to"
change master to master_host='(从1IP)',master_user='repl',master_password='repl',master_log_file='XXX',master_log_pos=XXX;
start stave;
show slave status\G
show processlist;
)联级复制测试
主库:
create database db3;
从1:
show databases;(获得新建库)
从2:
show databases;(获得新建库)
 
监控与处理

 
#查看状态
show slave status;
成功与否:
slave_sql_running:
slave_io_running:
 
延时多久
seconds_Behind_Master
 
从库出现问题时
last_sql_errno
last_sql_error
last_io_errno
last_io_error
 
复制出错处理
常见:1062(主键冲突),1032(记录不存在)
解决:
  • 手动处理
  • 跳过复制错误:set global sql_slave_skip_counter=1
 
复制出错,大部分因为,主从数据不一致导致的;
最好的办法还是进行数据主从复制的校验;percona公司有主从复制校验工具;
 
 
 
 
 
 
 
 
 

mysql 主从复制 实践的更多相关文章

  1. MySQL主从复制(Master-Slave)实践

    MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...

  2. 【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构

    一.业务发展驱动数据发展 随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长.特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案 ...

  3. mysql主从复制原理及实践

    Mysql主从复制原理及实践 mysql主从框架       MySQL主从架构是MySQL集群中最基本也是最常用的一种架构部署,能够满足很多业务需求,常见的有一主一从或者一主多从.可以防止单一主机的 ...

  4. 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践

    一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...

  5. MySQL主从复制与读写分离实践

    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践  目录: 介绍 MySQL的安装与配置 MySQL主从复制 MySQL读写分离 编译安装lua 安装配置MySQ ...

  6. MySQL主从复制介绍:使用场景、原理和实践

    MySQL主从复制介绍:使用场景.原理和实践 MySQL数据库的主从复制方案,和使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过MySQL的主从复制是其自带的功能,无需借 ...

  7. Linux下Mysql主从复制(Master-Slave)与读写分离(Amoeba)实践

    一.为什么要做Mysql的主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...

  8. [转]MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践

    转自:http://heylinux.com/archives/1004.html Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单 ...

  9. MySQL主从复制与读写分离

    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...

随机推荐

  1. RSS(Residual Sum of Squares)的自由度为什么是n-1呢

    [转载请注明出处]http://www.cnblogs.com/mashiqi 在回归问题中,偶尔我们会遇到求方差的估计的情况.举了例子,我们常常通过Gaussian分布${\cal N}(\mu , ...

  2. Python 基礎 - if else流程判斷

    hmm~前面講了那麼多,終於可以稍稍的正式進入另一個階段,沒錯,要開始寫判斷式了 這次先從最簡單的判斷式開始,if else 開始- Go 首先,之前有寫有一個簡單的互動式 用戶輸入 的代碼,忘記了嗎 ...

  3. ListView去除顶部和底部边缘阴影(亲测4.4及以前的版本都适用)

    ListView滑动到顶部和底部时出现的阴影消除方法:android2.3以前用android:fadingEdge="none"android2.3以后用android:over ...

  4. [20150925]Linux之文件系统与SHELL

    Linux之文件系统与SHELL 文件系统介绍 ext2/ext3/ext4 Ext2是GNU/Linux系统中标准的文件系统.这是Linux中使用最多的一种文件系统,它是专门为Linux设计的,拥有 ...

  5. HTTP POST GET详解

    get /shang/a1.php http/1.1 host: localhost                           POST /shang/a1.php HTTP/1.1 Hos ...

  6. spring mvc 4数据校验 validator

    注解式控制器的数据验证.类型转换及格式化——跟着开涛学SpringMVC http://jinnianshilongnian.iteye.com/blog/1733708Spring4新特性——集成B ...

  7. phoenix与spark整合

    目的是将phoenix做存储,spark做计算层.这样就结合了phoenix查询速度快和spark计算速度快的优点.在这里将Phoenix的表作为spark的RDD或者DataFrames来操作,并且 ...

  8. [Eclipse] - 集成Tomcat热加载插件

    使用Eclipse + Tomcat,要使用热加载,总是会重启tomcat webapp. 可以使用这个插件:jrebel 如果是Tomcat 7.0+版本,需要使用jrebel5.5.1+的版本,不 ...

  9. python 面向对象学习

    ------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...

  10. WebApi:自定义筛选器

    最近在项目中有这样一个需求,记录每次Api访问的调用时间,运行时间,传入数据,返回数据等信息. 第一反应就是添加一个类,用来实现相应的功能,然后在方法的代码中添加,但是这样的话,需要修改所有的方法的代 ...