mysql 主从复制 实践
- 备份还原
- 使用mysqldump或者xtrabackup
- 把主库现有基础数据还原到从库
- 授权
- grant replication slave on *.*
- 给从库一个复制binlog的账号
- 配置复制,并启动
- 从库上配置复制信息,并指向master
- 查看主从复制信息
- show slave status \G
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`
--
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
mysql> grant replication slave on *.* to repl@192.168.1.100 identified by 'repl';
Query OK, rows affected (0.00 sec)
#查看帮助信息
? 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';
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第一个文件;
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
)主库安装插件
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)
.png)
#从库:
show variables like '%slave_par%';
set global slave_parallel_workers=; 设置sql线程数为10
#重启 slave
stop slave;
start slave;
#查看线程
show processlist;(十个worker线程)
)主库:
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表)
)从库:
#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;
- 手动处理
- 跳过复制错误:set global sql_slave_skip_counter=1
mysql 主从复制 实践的更多相关文章
- MySQL主从复制(Master-Slave)实践
MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...
- 【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构
一.业务发展驱动数据发展 随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长.特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案 ...
- mysql主从复制原理及实践
Mysql主从复制原理及实践 mysql主从框架 MySQL主从架构是MySQL集群中最基本也是最常用的一种架构部署,能够满足很多业务需求,常见的有一主一从或者一主多从.可以防止单一主机的 ...
- 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践
一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...
- MySQL主从复制与读写分离实践
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 目录: 介绍 MySQL的安装与配置 MySQL主从复制 MySQL读写分离 编译安装lua 安装配置MySQ ...
- MySQL主从复制介绍:使用场景、原理和实践
MySQL主从复制介绍:使用场景.原理和实践 MySQL数据库的主从复制方案,和使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过MySQL的主从复制是其自带的功能,无需借 ...
- Linux下Mysql主从复制(Master-Slave)与读写分离(Amoeba)实践
一.为什么要做Mysql的主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...
- [转]MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
转自:http://heylinux.com/archives/1004.html Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单 ...
- MySQL主从复制与读写分离
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...
随机推荐
- Python::OS 模块 -- 进程参数
os模块的简介请参看 Python::OS 模块 -- 简介 os模块的文件和目录操作 Python::OS 模块 -- 文件和目录操作 os模块的进程管理 Python::OS 模块 -- 进程管理 ...
- Linux下手动获取当前调用栈
被问到如何手动获取当前的调用栈,之前碰到过一时没记起来,现在回头整理一下. 其原理是:使用backtrace()从栈中获取当前调用各层函数调用的返回地址,backtrace_symbols()将对应地 ...
- Linux命令行与图形界面切换方法
1.实时切换 1.1 命令行->图形 startx 1.2 图形->命令行 Ctrl+Alt+F1--F6 2.启动默认 2.1 启动进入命令行 修改/etc/inittab文件 &quo ...
- .jre下的lib和jdk下的lib的区别
jre是JDK的一个子集.提供一个运行环境.JDK的lib目录是给JDK用的,例如JDK下有一些工具,可能要用该目录中的文件.例如,编译器等.JRE的lib目录是为JVM,运行时候用的.包括所有的标准 ...
- Android——手机内部文件存储(作业)
作业:把用户的注册信息存储到文件里,登录成功后读出并显示出来 activity_practice2的layout文件: <?xml version="1.0" encodin ...
- There is already an open DataReader associated with this Command which must be closed first." exception in Entity Framework
Fixing the "There is already an open DataReader associated with this Command which must be clos ...
- localStorage兼容ie6/7 用addBehavior 实现
制作过程我就不说了,程序下面会占出来 define(function(){ if('localStorage' in window) return; function Storage(){ this. ...
- Node调试之道-----JSHint
Node调试之道-----JSHint Node的优势我就不再乱吹捧了,它让javascript统一web的前后台成为了可能.但是对于新手来说,server端的JS代码可能不像client端的代码那么 ...
- 02 Linux 下安装JDK并测试开发“Hello World!”
测试环境 主机系统:Win7 64位 虚拟机:VMware® Workstation 11.1.0 虚拟机系统:CentOS 6.5 64位 Kernel 2.6.32-431.e16.x86_6 ...
- The content of the adapter has changed but ListView did not receive a notification
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive ...