首页 > 数据库 >mysql主从同步配置步骤详解

mysql主从同步配置步骤详解

时间:2022-12-06 21:37:48浏览次数:42  
标签:slave 详解 master mysql 服务器 docker root 主从

1 介绍

主从同步使得数据可以从一个服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。

使用主从同步的好处:

  • 提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
  • 提高数据安全-因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
  • 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能

注意,mysql是异步复制的,而MySQL Cluster是同步复制的

2 Docker搭建mysql主从同步

2.1 docker镜像

2.2 创建docker容器

 docker run -d -p 3307:3306 --name mysql_instance1 -e MYSQL_ROOT_PASSWORD=123456 mysql 

 

 

连接数据库试一下

[root@szj ~]# mysql -h192.168.3.148 -P3307 -uroot -p123456
mysql> show databases;

2.3 配置my.cnf

进入第一个容器内部

[root@szj docker]# docker exec -it mysql_instance1 /bin/bash
[root@szj ~]# docker exec -it mysql_instance1 /bin/bash
root@8c2a85985cd1:/# cd /etc/mysql/
root@8c2a85985cd1:/etc/mysql# ls
conf.d  my.cnf  my.cnf.fallback

刚创建的容器vi不能使用,需要安装

root@8c2a85985cd1:/etc/mysql# apt-get update
…
Reading package lists... Done
root@5890745bbef6:/etc/mysql# apt-get install vim

安装成功后,编辑my.cnf文件

 root@5890745bbef6:/etc/mysql# vi my.cnf 

添加如下

server-id=10(不能为0,刚开始配置的是0,导致后面主从同步有问题,后来改为10)
log-bin=mysql-bin

同样进入第二个容器,做上面操作,my.cnf添加如下内容

server-id=1(不能为0)
log-bin=mysql-bin

2.4 重启docker容器

先停止容器

[root@szj ~]# docker stop mysql_instance1
[root@szj ~]# docker stop mysql_instance2

再启动container mysql_instance1和mysql_instance2

[root@szj ~]# docker start mysql_instance1
[root@szj ~]# docker start mysql_instance2

2.5 配置master

登录3307创建用户并授权

mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql>

2.6 配置slave

登录3308创建用户并授权

mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql>

2.7 查看master容器的独立ip地址

root@8c2a85985cd1:/etc/mysql# [root@szj ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql_instance1
172.17.0.2

2.8 登录master,查看binlog的pos位置。

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      701 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2.9 登录slave,执行如下命令

mysql> change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=701, master_connect_retry=30;
Query OK, 0 rows affected, 1 warning (0.08 sec)

注意:master_port是3306,是容器内部端口,非宿主机端口。(在公司搭建时,发现master_host和master_port是宿主机ip和端口才能够搭建成功)

2.10 查看主从同步状态

 

此时正常情况下Slave_IO_Running和Slave_SQL_Running状态是No。因为没有开启主从同步。

2.11 开启主从同步

mysql> start slave;//关闭主从同步用stop slave;
Query OK, 0 rows affected (0.10 sec)

再执行 show slave status \G 

如果Slave_IO_running:running,且Last_IO_Error:Authentication plugin 'caching_sha2_password' reported error。这种情况是因为mysql8加密规则修改了导致的,我们这里改为老版本的加密规则。

修改用户的加密规则:

mysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.12 sec)
mysql>
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> ALTER USER 'slave'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.04 sec)
mysql>
mysql> ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)

修改加密规则之后再重新进行上面配置。重新开启主从同步。

如果Slave_IO_Running和Slave_SQL_Running都为Yes,则说明配置成功:

(在某次搭建的过程中,出现如下报错,原因是master之前日志是binlog.000006,配置过程中改为日志文件为mysql-bin.000001,所以复制的时候最新的日志里找不到数据库。解决方式是mysqldump导出再导入。然后重新开启主从同步,就可以了。)

 

 

2.12 测试

连接master创建个数据库test

连接slave,查询数据库

主从复制配置成功。

标签:slave,详解,master,mysql,服务器,docker,root,主从
From: https://www.cnblogs.com/zhenjingcool/p/16960607.html

相关文章

  • MySQL的安装与配置,可视化软件安装,以及IDEA上的配置操作
    1.MySQL安装详细教程注意:本次安装例为随笔发布时最新的8.0.31版本教程,由于您所希望安装的版本不同可能会导致一些问题,请谅解。进入官网下载界面https://www.mysql.com......
  • 《MySQL必知必会》知识汇总四
    十七、插入数据本章将介绍如何利用sql的INSERT语句将数据插入表中数据插入插入分为以下几种方式:插入完整的行、插入行的一部分、插入多行、插入某些查询结果插入完......
  • C#连接MySQL数据库,进行增删改查
    一、创建数据库学生表createdatabasetest;createtablestudent( sNovarchar(50)primarykey, sNamevarchar(50)notnull)补充:数据的增删改查相关操......
  • idea java 关于mysql数据库连接的相关步骤
    1.首先在你的项目中建立一个lib文件夹(表示加入依赖)(资源在上面)       2.选择这个项目的Properties在下面页面中添加Libraries进入这个项目jar配置到项......
  • Mysql8.0.25安装过程
    步骤一.下载mysql8.0.25步骤二.下载完解压后如下图:  图片中显示可知,并没有exe用来安装,那么请看第三步步骤三.创建一个txt文本文件,将下边的......
  • Servlet_生命周期详解和Servlet_3.0注解配置
    Servlet_生命周期详解:1.被创建:执行init方法,只执行一次Servlet什么时候被创建?默认情况下,第一次被访问时,Servlet被创建可以配置执行Servlet的创建时机......
  • mysql删库脚本
    createproceduretrunTables()begindeclareflagintdefault0;declaret_nameVARCHAR(255);declaretable_name_listCURSORFOR(selecttable_nameast_namefr......
  • 解决linux下mysql-server在root账户下无需密码就能登陆的问题
    root用户无需密码即可登录使用root用户登录mysql切换到mysql数据库usemysql;使用下面的命令设置密码updateusersetauthentication_string=password('新......
  • Postman数据驱动详解
    数据驱动(读取外部数据)相同的测试脚本使用不同的测试数据,数据的改变从而驱动自动化的执行,最终引起测试结果的改变步骤:1.执行单条接口用例,观察请求、响应格式。方便编写......
  • Mysql
    数据库(DB:DateBase)概念:数据仓库,可以存储大量数据和管理数据分类关系型数据库:MySQL,Oracle,SqlServer,SQLite通过表和表之间,行和列之间的关系进行数据的存储非关系型数......