MySQL-Replication(主从复制)

2024-03-04 21:50

本文主要是介绍MySQL-Replication(主从复制),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 主从复制示意图

准备环境

两台主机master 和 slave

#关闭防火墙和selinux

[root@localhost ~]# systemctl stop firewalld --now && setenforce 0

# 修改主机名

[root@localhost ~]# hostnamectl set-hostname master
另外一台主机
[root@localhost ~]# hostnamectl set-hostname slave

# 固定IP

[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.203
PREFIX=24
GATEWAY=192.168.100.2
DNS1=223.5.5.5
DNS2=223.6.6.6

# 主机名解析

vim /etc/hosts
192.168.100.203 master
192.168.100.204 slave

清理环境

# 清理数据库
[root@master ~]# yum -y erase `rpm -qa | egrep "mysql|mariadb"`
[root@master ~]# rm -rf /etc/my* && rm -rf /var/lib/mysql && rm -rf /usr/bin/mysql
# 检查一下
[[ ! -f /etc/my.cnf ]] && [[ ! -d /var/lib/mysql ]] && [[ ! -f /usr/bin/mysql ]] && echo "环境已经清理完成" || echo "环境未清理"

安装数据库

#安装数据库
上传数据包,解压本地安装
#启动
systemctl start mysqld
#修改密码
mysqladmin -uroot -p"`awk '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log`" password 'Qq111111.'

无数据主从复制

1、主库(master)

#开启binlog
[root@master ~]# mkidr -pv /data/
[root@master ~]# chown mysql.mysql /data
[root@master ~]# vim /etc/my.cnf
server-id=203
log-bin=/data/mysql-bin
# 重启数据库
# 创建一个账号
mysql> grant replication slave on *.* to 'relication'@'%' identified by 'Qianfeng@123';
mysql> flush privileges;
# 查看当前binlog日志文件以及pos位置点
mysql> show master status\G
*************************** 1. row ***************************File: mysql-bin.000001Position: 154Binlog_Do_DB: Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

2、从库(slave)

#配置文件中增加server-id

[root@slave ~]# vim /etc/my.cnf
server-id=204
[root@slave ~]# systemctl restart mysqld
[root@slave ~]# mysql -pQq111111.
mysql> ? change master to
mysql> CHANGE MASTER TOMASTER_HOST='master',MASTER_USER='relication',MASTER_PASSWORD='Qianfeng@123',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154,MASTER_CONNECT_RETRY=10;
# 启动slave
mysql>start slave;
# 查看主从是否成功
mysql> show slave status\G

3、重新配置主从

当配置不成功时检查用户名、密码、IP 是否正确

进入从库
mysql>stop slave;
mysql> reset slave;
mysql>CHANGE MASTER TOMASTER_HOST='master',MASTER_USER='relication',MASTER_PASSWORD='Qianfeng@123',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154,MASTER_CONNECT_RETRY=10;
## 启动slave
mysql>start slave;

有数据

1、主库(master)

#配置主从
mysql> grant replication slave on *.* to 'repl'@'%' identified by 'Qq12345.';
mysql>flush privileges;
# 创建必要目录
[root@master ~]# mkdir /data
[root@master ~]# chown mysql.mysql /data
# 修改配置文件
[root@master ~]# vim /etc/my.cnf
server-id = 203
log-bin = /data/mysql-bin
# 重启数据库
[root@master ~]# systemctl restart mysqld
#锁表备份
mysql>flush tables with read lock;
# 新开一个终端窗口
[root@master ~]# mysqldump -uroot -pQq111111. -A > all.sql
#远程拷贝至从库
[root@master ~]# scp all.sql slave:/root/
#查看二进制日志文件以及位置点信息
mysql>show master status\G
*************************** 1. row ***************************File: mysql-bin.000001Position: 154Binlog_Do_DB: Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

2、从库(slave)

#导入数据
[root@slave ~]# mysql -uroot -pQq111111. < all.sql
#配置主从
[root@slave ~]# vim /etc/my.cnf
server-id = 204
# 重启数据库
[root@slave ~]# systemctl restart mysqld
mysql>change master to
master_host='master',
master_user='repl',
master_password='Qq12345.',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=154;
#启动slave
mysql>start slave;
# 查看主从状态
mysql> show slave status\G
 

主库解锁

mysql> unlock tables;
或者直接退出

跳过错误码

注意:从库插入数据后, 产生主键冲突,在配置文件 /etc/my.cnf 中添加,跳过错误就可以了

这篇关于MySQL-Replication(主从复制)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/774524

相关文章

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum