MySQL5.7主从复制实例讲解
时间:2018-09-18
本文章向大家介绍关于MySQL5.7开启bin-log主从复制,主要包括master主库配置同步,slave从库配置同步,master锁表/备份,slave恢复数据,slave启用同步,master解锁等等,需要的朋友可以参考一下
主从复制:一般用于实时备份。
简单说下步骤: master主库配置同步,slave从库配置同步,master锁表/备份,slave恢复数据,slave启用同步,master解锁,完成。
##################### mysql5.7 bin-log日志开启, 必须设置server-id ###################
############### master 主机
vim /etc/my.cnf # [mysqld] 部分增加以下配置
server-id=1 #服务器id (主从必须不一样) log-bin=mysql-bin # 打开日志(主机需要打开),这个mysql-bin 可自定义,也可加上路径 binlog-do-db=monitor_db #要给从机同步的库 binlog-ignore-db=mysql #不给从机同步的库(多个写多行) binlog-ignore-db=mysqlslap binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=sys expire_logs_days=3 # 自动清理 3 天前的log文件 可根据需要修改
# 保存退出,重启mysql服务
cd mysql/var # 可以看到mysql-bin.000001
show variables like "%log_bin%"; # 查看 log_bin 是否 ON -- 授权backup用户可以进行远程复制 -- grant FILE on *.* to 'backup'@'%' identified by 'backup'; -- grant replication slave on *.* to 'backup'@'%' identified by '123456'; -- flush privileges; -- select user,authentication_string,host from user; -- flush tables with read lock; -- 锁定主数据库, 防止主从不一致(此时,主数据库无法再写入数据) -- show master statusG -- 显示master 信息 记下File和Position
# 然后执行主数据库备份,并还原到从数据库。(无法做到主数据库不停服)
############### slave 从机 vim /etc/my.cnf # [mysqld] 部分增加以下配置
log-bin=mysql-bin server-id=2 binlog-ignore-db=information_schema binlog-ignore-db=cluster binlog-ignore-db=mysql replicate-do-db=monitor_db replicate-ignore-db=mysql log-slave-updates slave-skip-errors=all slave-net-timeout=60
# 保存退出并重启mysql 并SQL执行以下操作: -- stop slave; -- change master to master_host='192.168.112.6',master_user='bakcup',master_password='123456',master_log_file='mysql-bin.000001', master_log_pos=154; -- start slave; -- UNLOCK TABLES; -- 到主库上执行解锁主库 -- show slave statusG --显示slave信息 # master_log_file是 Master 主机 show master status 显示的File,而master_log_pos是显示的Position。 # 然后可以通过show slave status查看 slave 中的position和file是否和master中的对应一致。 # 对master数据库进行CURD,验证slave库是否有相应同步
################################ 其它常用操作 ############################ ######### 这些操作是低于 5.7版本的操作,还没有在 5.7上亲自验证 flush logs; -- 刷新日志 生成新的mysql-bin文件 show master status; -- 查看二进制日志和Position reset master; --清空bin-log s --查看字符集 #使用自带工具来查看bin-log mysql/bin/mysqlbinlog --no-defaults mysql-bin.000001 |more #备份数据库时可以 flush logs; 就会生成新的bin-log #恢复时间差里没有备份的数据到test库 mysql/bin/mysqlbinlog --no-defaults mysql-bin.000002 |/usr/local/mysql/bin/mysql -uroot -p123 test #备份数据: -F即flush logs; -l是读锁, 只能读不能写. mysqldump -uroot -p123 test -l -F > '/tmp/test.sql' #恢复数据: 先恢复之前的备份,再恢复时间差内的. mysql -uroot -p123 test < /tmp/test.sql -- 参数-f是遇到错误跳过 mysql/bin/mysqlbinlog --no-defaults mysql-bin.000002 |/usr/local/mysql/bin/mysql -uroot -p123 test #选择节点的恢复 即多了起始点的选择 mysql/bin/mysqlbinlog --no-defaults mysql-bin.000002 --start-position="193" --stop-position="280" |/usr/local/mysql/bin/mysql -uroot -p123 test show slave statusG # 反转行列查看,有下面两列即表示主从同步成功. Slave_IO_Running: Yes Slave_SQL_Running:Yes ######################### 自带压力测试 ################################# # 在OS的shell下执行命令: mysqlslap -hlocalhost -uroot -p123456 -P3306 --concurrency=5000 --iterations=1 --auto-generate-sql --auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=5000 # 可能需要先修改OS的连接数 ulimit -n 65535 # 以及mysql的 max_connections show variables like '%max_connections%' -- 最大连接数 set global max_connections=6000; -- 改变当前进程中的设置. 永久设置需要在my.cnf中加入 -- SELECT @@innodb_buffer_pool_size; -- 查看innodb_buffer_pool_size -- SELECT @@innodb_buffer_pool_chunk_size; -- 块大小,默认128M -- SELECT @@innodb_buffer_pool_instances; -- 实例数, 默认8 -- SET GLOBAL innodb_buffer_pool_size=1073741824; -- 1G -- SET GLOBAL innodb_buffer_pool_size=8589934592; -- 8G -- 设置innodb_buffer_pool_size 不必重启
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Android添加ButterKnife时报错Error:(2, 0) Cannot add extension with name 'android'的解决办法
- Python视频编辑库MoviePy的使用
- python json.dumps中文乱码问题解决
- Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式
- Android开发导入项目报错Ignoring InnerClasses attribute for an anonymous inner class的解决办法
- Android中buildToolVersion与CompileSdkVersion的区别
- Glide用法与技巧以及优秀库的推荐
- Android整理好的图片压缩工具类
- Android Studio获取网络JSON数据并处理的方法
- Android使用ViewPager快速切换Fragment时卡顿的优化方案
- 在Android打包中区分测试和正式环境浅析
- django 多数据库及分库实现方式
- Python气泡提示与标签的实现
- Django之choices选项和富文本编辑器的使用详解
- Android使用RSA加密和解密的示例代码