mysql5.7.31 主从复制搭建
程序员文章站
2022-03-19 16:17:45
Mysql 主从复制一.检查环境机器一(192.168.0.109) centos7,mysql5.7.31开放3306端口机器二(192.168.0.111) centos7,mysql5.7.31开放3306端口需要注意 如果是通过克隆虚拟机方式搭建环境 注意坑 mysql server uuid 冲突# 找到mysql datadirmysql> show variables like 'datadir';+---------------+-------...
Mysql 主从复制
一.检查环境
-
机器一(192.168.0.109) centos7,mysql5.7.31
- 开放3306端口
-
机器二(192.168.0.111) centos7,mysql5.7.31
- 开放3306端口
-
需要注意 如果是通过克隆虚拟机方式搭建环境 注意坑 mysql server uuid 冲突
-
# 找到mysql datadir mysql> show variables like 'datadir'; +---------------+--------------+ | Variable_name | Value | +---------------+--------------+ | datadir | /data/mysql/ | +---------------+--------------+ 1 row in set (0.01 sec) ---------------------------------------------- # 编辑 /data/mysql/ 路径下 auto.cnf 文件 [auto] server-uuid=80422fd7-34a5-11eb-b54e-000c29d7a930 # 将uuid修改至唯一,随便更改一位即可 保存退出 重启mysql服务 service mysqld restart
-
二.修改 mysql配置文件
- 新增配置文件
master-slave.cnf
位于/etc/my.cnf.d/
文件夹下
# master-slave.cnf 文件内容如下 根据提示相应修改
[mysqld]
# *设置server_id,一般设置为IP 要有唯一性*
server_id=110
# 复制过滤:需要备份的数据库,输出binlog
#binlog-do-db=roncoo
# 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
# 中继日志
relay_log=mysql-relay-bin
# 开启二进制日志功能,可以随便取,最好有含义
log-bin=mysql-bin
# 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
-
在
/etc/my.cnf
中引入/etc/my.cnf.d/
文件夹下的配置文件将
!includedir /etc/my.cnf.d
追加到/etc/my.cnf
文件末尾- 方式一:
[root@192 ~]# echo '!includedir /etc/my.cnf.d' >> /etc/my.cnf
- 方式二:
vim 编辑 /etc/my.cnf 将 !includedir /etc/my.cnf.d 追加到文件末尾
1.修改两台机器 /etc/my.cnf
配置文件
- 机器一 ( 192.168.0.109)
- /etc/my.cnf
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
skip-name-resolve
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/usr/local/env/mysql-5.7.31
# 设置mysql数据库的数据的存放目录
datadir=/data/mysql
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
symbolic-links=0
explicit_defaults_for_timestamp=true
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
log-error=/data/mysql/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid
pid-file=/data/mysql/mariadb.pid
!includedir /etc/my.cnf.d
- /etc/my.cnf.d/master-slave.cnf
[mysqld]
# *设置server_id,一般设置为IP 要有唯一性*
server_id=109
# 复制过滤:需要备份的数据库,输出binlog
#binlog-do-db=roncoo
# 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
# 中继日志
relay_log=mysql-relay-bin
# 开启二进制日志功能,可以随便取,最好有含义
log-bin=mysql-bin
# 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
-
机器二 ( 192.168.0.111)
-
/etc/my.cnf
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
skip-name-resolve
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/usr/local/env/mysql-5.7.31
# 设置mysql数据库的数据的存放目录
datadir=/data/mysql
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
symbolic-links=0
explicit_defaults_for_timestamp=true
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
log-error=/data/mysql/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid
pid-file=/data/mysql/mariadb.pid
!includedir /etc/my.cnf.d
- /etc/my.cnf.d/master-slave.cnf
[mysqld]
# *设置server_id,一般设置为IP 要有唯一性*
server_id=111
# 复制过滤:需要备份的数据库,输出binlog
#binlog-do-db=roncoo
# 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
# 中继日志
relay_log=mysql-relay-bin
# 开启二进制日志功能,可以随便取,最好有含义
log-bin=mysql-bin
# 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
2.重启两台机器mysql服务
service mysqld restart
3.新增slave用户 配置 开始主从复制
两台机器mysql服务主从配置完成后 是可以 互为主从 的, 我们先做主从模式
-
选出一台机器做Master(192.168.0.109) 一台机器做Slave(192.168.0.111)
-
在Master机器上新增用户,并查看Master状态;
- 新增用户
# 新增用户 slave 允许从ip为192.168.0.111的机器,通过密码 pwd.slave 来访问 mysql> grant replication slave,replication client on *.* to 'slave'@'192.168.0.111' identified by 'pwd.slave'; # 刷新使其生效; mysql> FLUSH PRIVILEGES;
- 查看Master status;
#查看Master status; mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 | 1307 | | mysql | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) # 记住文件名 mysql-bin.000002 和 Position 1307;
-
在Slave机器上 设置链接master的信息,并开始主从复制;
- 在Slave机器上 设置链接master的信息
# 先停止以下,避免会出错; mysql> stop slave; Query OK, 0 rows affected (0.00 sec) # 设置master服务器的一些参数 参数说明看下面的解释 mysql> change master to master_host='192.168.0.109', master_user='slave', master_password='pwd.slave', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=1060, master_connect_retry=30; Query OK, 0 rows affected, 2 warnings (0.01 sec) # start slave mysql> start slave; Query OK, 0 rows affected (0.00 sec) # 查看slave status mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.109 Master_User: slave Master_Port: 3306 Connect_Retry: 30 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 1307 Relay_Log_File: mysql-relay-bin.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 1307 Relay_Log_Space: 527 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 111 Master_UUID: 80422fd7-34a5-11eb-b54e-0100c29da930 Master_Info_File: /data/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec) # 当看到 以下时 说明链接成功... Slave_IO_Running: Yes Slave_SQL_Running: Yes
master_host='192.168.0.109' # Master的IP地址 master_user='slave' # 用于同步数据的用户(在Master中授权的用户) master_password='pwd.slave' # 同步数据用户的密码 master_port=3306 # Master数据库服务的端口 master_log_file='mysql-bin.000002' #指定Slave从哪个日志文件开始读复制数据(可在Master上使用show master status查看到日志文件名) master_log_pos=1307 # 从哪个POSITION号开始读 master_connect_retry=30 #当重新建立主从连接时,如果连接建立失败,间隔多久后重试。单位为秒,默认设置为60秒,同步延迟调优参数。
# 可通过此命令查看链接状态 横向展示不便 就竖向展示了 mysql> show processlist\G *************************** 1. row *************************** Id: 6 User: root Host: 192.168.0.105:65147 db: NULL Command: Sleep Time: 44 State: Info: NULL *************************** 2. row *************************** Id: 12 User: slave Host: 192.168.0.111:56010 db: NULL Command: Binlog Dump Time: 1067 State: Master has sent all binlog to slave; waiting for more updates Info: NULL *************************** 3. row *************************** Id: 14 User: root Host: localhost db: NULL Command: Query Time: 0 State: starting Info: show processlist 3 rows in set (0.00 sec)
4.测试MySQL的主从备份
测试就是在主库中进行DDL以及DML语句的执行,看从库是否会跟主库一样发生变化
master中
create database test01;
use test01;
CREATE TABLE `test01` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
insert into test01(username) values('zhangsan');
查看master与slave是否都有变化,如果数据一致,就说明配置成功
互为主从
将 新建主从用户 配置主从参数 互换着再来一次就好了 可以自己尝试
本文地址:https://blog.csdn.net/weixin_45228674/article/details/110530295
上一篇: python中entry用法讲解
下一篇: 计算机名词总结(查询用)
推荐阅读
-
centos+mono+nginx+jexus 搭建linux下c#运行环境测试
-
前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例
-
在IntelliJ IDEA 搭建springmvc项目配置debug的教程详解
-
搭建Spark高可用集群
-
四、pix2pixHD代码解析(models搭建)
-
tomcat性能优化之如何搭建Apr模块
-
干货分享:怎样搭建一个手机微信商城
-
在CentOS系统上从零开始搭建WordPress博客的全流程记录,centoswordpress
-
怎样解决MySQL数据库主从复制延迟的问题
-
win2000下搭建wamp5服务器【外网不能访问有关问题】紧急