一、基本概念
在互联网应用中,大部分都是读多写少的场景; 设置两个库,主库和读库,主库的职能是负责写,从库主要是负责读,可以建立读库集群,通过读写职能在数据源上的隔离达到减少读写冲突、释压数据库负载、保护数据库的目的。在实际的使用中,凡是涉及到写的部分直接切换到主库,读的部分直接切换到读库,这就是典型的读写分离技术;通过读写分离,可以保证主库的写入性能,同时也可以提高从库的读取性能;该方案普遍适用于大多数业务场景。
在读写分离中,主数据库和从数据库保持数据库结构的一致,主库负责写,当写入数据的时候,会自动同步数据到从数据库;从数据库负责读,当读请求来的时候,直接从读库读取数据,主数据库会自动进行数据复制到从数据库中。 同时从库也可以作为主库的一个数据备份,从系统健壮性及数据安全性方面,读写分离技术同样重要。
二、环境准备
1. 两台CentOS主机,分别作为主库及从库的宿主机。
2. 确保主服务器可以通过网络访问从服务器。
三、搭建MySQL主从复制的主要步骤
3.1 安装Docker
1.卸载旧版本(如果有)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装需要的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置docker镜像源(阿里云源)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、更新yum软件包索引
sudo yum makecache fast
5、安装docker
sudo yum install docker-ce
6、启动Docker并加入开机启动
#启动:
sudo systemctl start docker
sudo systemctl enable docker
7.验证安装是否成功
sudo docker version
(有client和service两部分表示docker安装启动都成功了)
3.2 安装MySQL
在两台主机上,分别使用Docker安装MySQL(MySQL版本需要保持一致),主要命令如下:
#拉取镜像(默认版本)
docker pull mysql
#在3307端口运行MySQL
docker run -itd --name mysql-docker -p 3307:3306 -e MYSQL_ROOT_PASSWORD=passwordxx mysql
3.3 数据库的配置
#主服务器的MySQL配置
1、在主服务器上打开MySQL配置文件my.cnf,并添加以下配置:
[mysqld]
log-bin=mysql-bin
server-id=1
其中
log-bin:启用二进制日志记录,用于记录主服务器上的所有更改。
server-id:为主服务器设置唯一标识符,用于标识主服务器和从服务器。2、在主服务器上创建一个用于从服务器的账户,并授予复制权限:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
其中
repl:从服务器账户的用户名。
password123:从服务器账户的密码。
3、使用以下命令查看主服务器的二进制日志文件名和位置:
SHOW MASTER STATUS;
记下File和Position的值,稍后将在从服务器的配置时使用。
4、配置从服务器
在从服务器上打开MySQL配置文件my.cnf,并添加以下配置:
[mysqld]
server-id=2
5、重启主从服务器上的MySQL使配置生效。
sudo docker restart mysql
6、启动从服务器复制
在从服务器上的MySQL执行以下命令,连接到主服务器:
CHANGE MASTER TO MASTER_HOST = 'master_host_name', MASTER_USER = 'repl', MASTER_PASSWORD = 'password123', MASTER_PORT = 3307, MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS=747;
其中
master_host_name:主服务器的IP地址或主机名
master_user:上述步骤创建的从服务器复制账号
master_password:上述步骤创建的从服务器复制账号的密码
recorded_log_file_name:上述步骤中记录的主服务器的二进制日志文件名。
recorded_log_position:上述步骤中记录的主服务器的二进制日志位置。
7、启动从服务器复制
START SLAVE;
8、使用以下命令检查从服务器复制进程是否已启动
SHOW SLAVE STATUS\G
如果Slave_IO_Running和Slave_SQL_Running的值都为“YES”,则表示从服务器已经成功连接到主服务器并开始复制。
9、 其他命令
//如果需要停止主从服务复制的功能,使用以下命令:
stop slave;
//若搭建主从复制的过程出错,则需要清理掉之前的配置,还需要执行以下命令:
reset slave all;
3.4 数据验证与测试
1. 在主从数据库分别导入或创建对应的数据表。
2.在主库进行数据的插入或者修改删除,查看从库的数据变化。
福利来了,京东618无门槛红包,速抢,亲测可用!!!
京东618狂欢红包,无门槛,速抢!!!https://u.jd.com/kbEMRtj