Ubuntu环境下配置MySQL主从复制(一主一从)

Ubuntu环境下配置MySQL主从复制

  • 实验环境
  • 主从复制介绍
  • 架构图
  • 配置主服务器
  • 配置从服务器
  • 测试
  • 错误记录
  • 写在最后
  • 参考文章

实验环境

  1. 两台虚拟机

192.168.1.7 #主服务器
192.168.1.8 #从服务器

  1. MySQL版本

Distrib 5.7.26

主从复制介绍

定义:一台服务器充当主服务器,另一台或多台服务器充当从服务器,主服务器中的数据自动复制到从服务器之中。
原理:数据库的每次更新变化都会以“events”的方式记录到一个二进制文件中,从库可以配置从主库中读取这些日志文件,并在从库本地执行,从而实现数据同步。由于每次从库读取完整的日志文件,所以从库需要记录上次同步的位置。

架构图

Ubuntu环境下配置MySQL主从复制(一主一从)_第1张图片

配置主服务器

  1. 切换到192.168.1.7主服务器,编辑my.cnf文件:

[mysqld]
log-bin=mysql-bin #启用BinaryLog,文件名为’mysql-bin’
server-id=1
binlog-igonre-db=mysql #设置复制过滤
binlog-do-db=game #只同步某些数据库
binlog_cache_size=1M #为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_format=mixed #主从复制的格式(mixed,statement,row,默认statement)
slave_skip_errors=1062 #跳过主从复制中遇到的错误

  1. 进入mysql交互式命令行,创建用户,设置密码,并进行授权

create user 'username'@'host' identified by 'password';
grant replication slave on *.* to 'username'@'host'; #允许所有主机,设置host为“%”
flush privileges;

  1. 获取二进制文件位置

flush tables with read lock; #锁定数据库
show master status; #查看主数据状态,记下file和Position的值

  1. 在不退出mysql交互式命令行的情况下,打开另一个终端,导出数据,发送到从服务器,可用scp命令

mysqldump -u root -p --all-databases --master-data > dbdump.db

  1. 导出数据成功,解除锁定,退出mysql交互式

unlock tables;
exit;

配置从服务器

  1. 切换到192.168.1.8从服务器,配置my.cnf文件:

[mysqld]
server-id=2

  1. 进入mysql交互式命令行,设置master相关信息

change master to
master_host='master_host', #master的ip地址或域名
master_user='username', #以上第2步设置的username
master_password='password', #以上第2步设置的password
master_log_file='filename', #以上第3步获取的file
master_log_pos=pos; #以上第3步获取的Position

  1. 打开另一个终端,将以上第4步的dbdump.db导入到从服务器数据库

mysql -u root -p < /path/to/dbdump.db

  1. 启动slave线程

start slave;
show slave status; #查看slave状态

测试

  1. 切换到192.168.1.7主服务器
  2. 登录到mysql交互式命令行

mysql -u root -p

  1. 创建数据库,创建表,插入数据

create database test;
use test;
create table t1(name varchar(20), value varchar(20));
insert into t1(name, value) values('name', 'value');
show databases;
show tables;
select*from t1;

  1. 切换到192.168.1.8,登录到mysql交互式命令行,查看数据

mysql -u root -p
show databases; #可以看到在主服务器创建的test表明主从配置成功
use test;
show tables;
select*from t1;

错误记录

  1. 主服务器与从服务器版本不一致

错误代码:ERROR 1042 (HY000): Can’t get hostname for your address
本实验最初,主机mysql版本是5.5,从机版本是5.7,后来将主机升级到5.7后,问题解决。

写在最后

由于作者水平有限,文章难免出现错误和理解不到位之处,请各位多多谅解,同时欢迎各位指出问题,提出建议,大家一起交流学习。

参考文章

1.Chapter 16 Replication

你可能感兴趣的:(数据库,MySQL)