mysql主从复制实战配置及测试

随着访问量的不断增加,单台MySQL数据库服务器的压力不断地增加,需要对MySQL进行优化和架构改造。
MySQL主从复制集群在中小企业、大型企业中被广泛应用,MySQL主从复制的目的是实现数据库冗余备份,将master数据库数据定时同步到slave库中,一旦master数据库宕机,可以将Web应用数据库配置快速切换至slave数据库,确保Web应用有较高的可用率。

Mysql主从复制原理图

一、系统环境准备

首先要准备两台服务器,这里使用的是两台CentOS虚拟机,推荐使用Xshell链接服务器。
服务器master:192.168.1.135,master服务器作为主服务器。
服务器slave:192.168.1.113,slave服务器作为次服务器。

(1)master服务器配置

首先master端在/etc/my.cnf配置文件的[mysqld]中加入以下代码:

server-id=1
log-bin=mysql-bin

更改配置之后一定要重启mysql服务,执行命令:

systemctl start mysqld

在master数据库服务器命令行中创建tongbu用户及密码并设置权限,执行如下命令,查看bin-log文件及position点:

grant replication slave on *.* to ‘tongbu’@’%’ identified by ‘123456’;

命令中的%指的是允许所有主机地址,这里在设置用户密码时出现了一个错误:
密码长度及安全性错误在这里可以执行命令来查看密码的相关配置:

SHOW VARIABLES LIKE 'validate_password%';

查看密码配置
在这里更改密码等级以及长度,执行命令:

//设置密码安全为低
set global validate_password_policy=LOW;
//设置密码长度为6
set global validate_password_length=6;

在设置之后重新查看密码的配置:
重新查看密码配置
这回我们再试试,重新设置用户及密码就能执行成功了,接着执行命令查看一下状态:

Show master status;

主要查看file和position.
查看状态

(2)slave安装及配置

在slave端安装好Mysql后,同样也是修改/etc/my.cnf配置文件[mysqld]段,加入以下代码,然后重启mysql服务即可。
注意:master与slave端的server-id不能一样,slave端无须开启bin-log功能

Server-id=2

Slave设置mastarIP、用户名、密码、bin-log文件夹(就是之前master查看状态的file,mysql-bin.000002)及position(439)代码如下:

change master to
    master_host='192.168.1.135',
    master_user='tongbu',
    master_password='123456',
    master_log_file='mysql-bin.000002',
	master_log_pos=439;

设置master
在slave中执行命令:

start slave;

执行命令show slave status\G查看MYSQL主从状态:`

show slave status\G

查看slave端I/O线程、SQL线程状态为connecting 和Yes,代表slave已正常连接master实现同步:
查看状态

二、联通测试

master和slave服务器已经接通了,接下来在master端创建mysql_db_test数据库和t0表,测试一下,依次执行命令如下:

create database mysql_db_test charset=utf8;
show databases;
use mysql_db_test;
create table t0 (id varchar(20),name varchar(20));
show tables;

新建测试表
我们在slave服务器查看是否有mysql_db_test数据库和t0表,如果存在就代表slave从master复制数据成功了,在master服务器的t0表中插入两条数据,并在slave查看是否已经同步:

insert into t0 values(“001”,”test1”);
insert into t0 values(“002”,”test2”);
select * from t0;

插入数据
在slave端查看一下是否能够查到对应数据,有数据则为成功!
成功

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装Docker 如果您还没有安装Docker,请按照官方文档的说明安装Docker。 2. 创建Docker网络 为了使主从复制工作,我们需要为Docker容器创建一个网络。在命令行中运行以下命令: ``` sudo docker network create mysql_network ``` 3. 启动主数据库 我们将使用官方的MySQL Docker镜像来启动主数据库。在命令行中运行以下命令: ``` sudo docker run -d --name mysql_master --net mysql_network -e MYSQL_ROOT_PASSWORD=password mysql:latest --server-id=1 --log-bin=mysql-bin --binlog-do-db=mydb ``` 这将启动一个名为mysql_master的Docker容器,并将其连接到我们创建的mysql_network网络中。我们还指定了一个root用户的密码,并为该容器分配了一个server-id,以便在创建从数据库时使用。 我们还使用了两个MySQL选项来启用二进制日志记录和仅记录mydb数据库的事务。 4. 启动从数据库 现在我们需要启动另一个MySQL容器作为从数据库。在命令行中运行以下命令: ``` sudo docker run -d --name mysql_slave --net mysql_network -e MYSQL_ROOT_PASSWORD=password mysql:latest --server-id=2 --log-bin=mysql-bin --binlog-do-db=mydb --relay-log=mysql-relay-bin --log-slave-updates=1 --read-only=1 --slave-skip-errors=all --skip-slave-start ``` 这将启动一个名为mysql_slave的Docker容器,并将其连接到我们创建的mysql_network网络中。我们还指定了一个root用户的密码,并为该容器分配了一个server-id。 我们还使用了一些MySQL选项来启用二进制日志记录和仅记录mydb数据库的事务。我们还启用了中继日志记录和从服务器更新主服务器的日志记录。我们还将容器设置为只读模式,并跳过任何从数据库错误。最后,我们将跳过从服务器的启动。 5. 配置主数据库 现在我们需要登录主数据库并为它创建一个用于从服务器的用户。在命令行中运行以下命令: ``` sudo docker exec -it mysql_master mysql -u root -p ``` 输入我们在启动容器时指定的root密码,这将进入MySQL shell。在MySQL shell中,运行以下命令: ``` GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; SHOW MASTER STATUS; ``` 这将创建一个名为slave_user的用户并授予其复制权限。我们还刷新了特权表以确保更改生效。最后,我们显示了主服务器的状态,以便稍后配置从服务器。 请注意,我们在第一行中使用了“%”通配符,以便从任何位置连接到主服务器。在生产环境中,您应该更明确地指定从服务器的IP地址。 6. 配置从数据库 现在我们需要登录从数据库并配置它以连接到主服务器。在命令行中运行以下命令: ``` sudo docker exec -it mysql_slave mysql -u root -p ``` 输入我们在启动容器时指定的root密码,这将进入MySQL shell。在MySQL shell中,运行以下命令: ``` CHANGE MASTER TO MASTER_HOST='mysql_master', MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; START SLAVE; ``` 这将配置从服务器以连接到我们的主数据库,并指定将从哪个二进制日志文件开始复制。我们还启动从服务器以开始复制。 请注意,我们在第一行中使用了主服务器的容器名称(mysql_master)作为主机名。在Docker网络中,容器可以使用其名称进行通信。 7. 测试主从复制 现在,我们已经成功配置主从复制,我们可以测试它是否正常工作。在MySQL shell中,运行以下命令: ``` USE mydb; CREATE TABLE test (id INT PRIMARY KEY); INSERT INTO test VALUES (1); ``` 这将在主服务器上创建一个名为test的表,并将一行插入其中。我们可以使用以下命令在从服务器上检查是否成功复制: ``` USE mydb; SELECT * FROM test; ``` 如果一切正常,您应该看到与主服务器上插入的相同的行。 现在,我们已经成功地使用Docker部署了MySQL主从复制。请记住,这只是一个简单的示例,用于演示如何设置主从复制。在生产环境中,您应该仔细考虑安全性和高可用性等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值