在前端开发中,数据库是不可或缺的一部分。而在实际生产中,为了确保数据的高可用性和可靠性,通常需要使用主从复制的方式来保障数据的备份和恢复。本文将介绍如何利用 Docker 部署 MySQL 主从复制,并提供示例代码和指导意义。
什么是主从复制
MySQL 主从复制是指将一个 MySQL 数据库服务器(主服务器)上的数据同步到其他 MySQL 数据库服务器(从服务器)上的过程。主从复制的主要目的是提高数据的可用性和可靠性,同时也可以提高系统的读写性能。在主从复制中,主服务器负责写操作,而从服务器则负责读操作。
Docker 安装
在开始部署 MySQL 主从复制之前,我们需要先安装 Docker。Docker 是一个开源的容器化平台,可以让开发者将应用程序及其依赖项打包到一个容器中,从而实现快速部署和移植。
Docker 安装方式多种多样,这里我们以 Ubuntu 为例,介绍一种常见的安装方式:
$ sudo apt-get update $ sudo apt-get install docker.io
安装完成后,运行以下命令验证 Docker 是否安装成功:
$ docker --version
如果输出 Docker 版本信息,则说明安装成功。
Docker 部署 MySQL
在安装完 Docker 后,我们就可以开始部署 MySQL 了。这里我们使用 Docker Compose 工具来管理容器。Docker Compose 是 Docker 官方提供的一个工具,可以通过一个 YAML 文件来定义、运行和管理多个容器应用。
首先,我们需要在本地创建一个名为 docker-compose.yml
的文件,并将以下内容复制到文件中:
// javascriptcn.com 代码示例 version: '3' services: mysql-master: image: mysql:5.7 restart: always environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: example ports: - "3306:3306" volumes: - ./mysql-master:/var/lib/mysql networks: - mysql-network mysql-slave: image: mysql:5.7 restart: always environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: example MYSQL_MASTER_HOST: mysql-master MYSQL_MASTER_PORT: 3306 MYSQL_MASTER_USER: root MYSQL_MASTER_PASSWORD: example ports: - "3307:3306" volumes: - ./mysql-slave:/var/lib/mysql networks: - mysql-network networks: mysql-network:
这里我们定义了两个 MySQL 容器:mysql-master
和 mysql-slave
。其中,mysql-master
为主服务器,mysql-slave
为从服务器。我们在 environment
中设置了 MySQL 的根密码、数据库名称和主服务器的连接信息。ports
定义了容器的端口映射,volumes
定义了容器的数据卷,networks
定义了容器的网络。
接下来,运行以下命令启动容器:
$ docker-compose up
启动完成后,我们可以通过以下命令查看容器的运行状态:
$ docker-compose ps
配置主从复制
在容器启动完成后,我们需要进行 MySQL 主从复制的配置。首先,我们需要登录到主服务器的 MySQL 控制台,并创建一个用于从服务器复制的账户:
$ docker exec -it docker_mysql-master_1 mysql -uroot -pexample mysql> CREATE USER 'slave'@'%' IDENTIFIED BY 'example'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'; mysql> FLUSH PRIVILEGES; mysql> EXIT;
接着,我们需要查看主服务器的状态信息,并记录下其中的 File
和 Position
字段的值:
$ docker exec -it docker_mysql-master_1 mysql -uroot -pexample -e "SHOW MASTER STATUS;"
然后,我们需要登录到从服务器的 MySQL 控制台,并执行以下命令配置从服务器的主服务器信息:
// javascriptcn.com 代码示例 $ docker exec -it docker_mysql-slave_1 mysql -uroot -pexample mysql> CHANGE MASTER TO -> MASTER_HOST='mysql-master', -> MASTER_PORT=3306, -> MASTER_USER='slave', -> MASTER_PASSWORD='example', -> MASTER_LOG_FILE='xxxxxx', -> MASTER_LOG_POS=xxxxx; mysql> START SLAVE; mysql> EXIT;
在上面的命令中,MASTER_LOG_FILE
和 MASTER_LOG_POS
分别为主服务器的 File
和 Position
字段的值。
最后,我们可以通过以下命令查看从服务器的状态信息,确保主从复制已经成功配置:
$ docker exec -it docker_mysql-slave_1 mysql -uroot -pexample -e "SHOW SLAVE STATUS\G"
如果输出的信息中的 Slave_IO_Running
和 Slave_SQL_Running
字段的值均为 Yes
,则说明主从复制已经成功配置。
总结
通过 Docker 部署 MySQL 主从复制可以极大地提高数据的可用性和可靠性,同时也可以提高系统的读写性能。本文介绍了如何利用 Docker Compose 工具来管理容器,并提供了详细的示例代码和指导意义。希望读者可以通过本文了解到 Docker 部署 MySQL 主从复制的方法,从而更好地应用于实际生产中。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65694e29d2f5e1655d1d7515