企业网站的建设对于网络品牌的塑造作用,wordpress适合百度吗,品牌建设培训心得体会,家装设计学校目录
主从复制简介
主从复制搭建 主从复制简介 主从复制#xff0c;是用来建立一个和主数据库完全一样的数据库环境#xff0c;称为从数据库#xff1b;主数 据库一般是准实时的业务数据库。 主从复制的作用 做数据的热备。作为后备数据库#xff0c;主数据库服务器故…目录
主从复制简介
主从复制搭建 主从复制简介 主从复制是用来建立一个和主数据库完全一样的数据库环境称为从数据库主数 据库一般是准实时的业务数据库。 主从复制的作用 做数据的热备。作为后备数据库主数据库服务器故障后可切换到从数据库继续工作 避免数据丢失架构的扩展。业务量越来越大I/O访问频率过高单机无法满足此时做多库的存储降低磁盘I/O访问的频率提高单个机器的I/O性能读写分离使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢导致锁表影响前台服务。如果前台使用master报表使用slave那么报表sql将不会造成前台锁保证了前台速度 主从复制的原理 数据库有个bin-log二进制文件记录了所有sql语句。 我们的目标是把主数据库的bin-log文件的sql语句复制过来。 让其在从数据的relay-log重做(中继)日志文件中再执行一次这些sql语句即可下面的主从配置就是围绕这个原理配置 具体需要三个线程来操作 binlog输出线程:每当有从库连接到主库的时候主库都会创建一个线程然后发送binlog内容到从库。在从库里当复制开始的时候从库就会创建如下两个线程进行处理从库I/O线程:当START SLAVE语句在从库开始执行之后从库创建一个I/O线程该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件其中包括relay log文件从库的SQL线程:从库创建一个SQL线程这个线程读取从库I/O线程写到relay log的更新事件并执行 主从复制搭建 本次搭建一主一从
新建主服务器容器实例3307
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORDroot \
-d mysql:5.7 查看mysql容器
[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eac439fb07df mysql:5.7 docker-entrypoint.s… 3 minutes ago Up 3 minutes 33060/tcp, 0.0.0.0:3307-3306/tcp, :::3307-3306/tcp mysql-master进入/mydata/mysql-master/conf目录并新建my.cnf
[rootlocalhost ~]# cd /mydata/mysql-master/conf
[rootlocalhost conf]# vim my.cnf编辑my.cnf文件
[mysqld]
## 设置server_id同一局域网中需要唯一
server_id101
## 指定不需要同步的数据库名称
binlog-ignore-dbmysql
## 开启二进制日志功能
log-binmall-mysql-bin
## 设置二进制日志使用内存大小事务
binlog_cache_size1M
## 设置使用的二进制日志格式mixed,statement,row
binlog_formatmixed
## 二进制日志过期清理时间。默认值为0表示不自动清理。
expire_logs_days7
## 跳过主从复制中遇到的所有错误或指定类型的错误避免slave端复制中断。
## 如1062错误是指一些主键重复1032错误是因为主从数据库数据不一致
slave_skip_errors1062 重启mysql容器
[rootlocalhost conf]# docker restart mysql-master
mysql-master进入mysql容器并登录mysql数据库
[rootlocalhost conf]# docker exec -it mysql-master /bin/bash
rooteac439fb07df:/# mysql -uroot -proot
mysql 创建数据同步用户
mysql CREATE USER slave% IDENTIFIED BY 123456;
Query OK, 0 rows affected (0.00 sec)授予权限
mysql GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave%;
Query OK, 0 rows affected (0.00 sec)新建从服务器容器实例3308 [rootlocalhost conf]# docker run -p 3308:3306 --name mysql-slave \-v /mydata/mysql-slave/log:/var/log/mysql \-v /mydata/mysql-slave/data:/var/lib/mysql \-v /mydata/mysql-slave/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORDroot \-d mysql:5.7进入 /mydata/mysql-slave/conf目录下新建my.cnf [rootlocalhost conf]# cd /mydata/mysql-slave/conf
[rootlocalhost conf]# vim my.cnf编辑my.cnf文件 [mysqld]
## 设置server_id同一局域网中需要唯一
server_id102
## 指定不需要同步的数据库名称
binlog-ignore-dbmysql
## 开启二进制日志功能以备Slave作为其它数据库实例的Master时使用
log-binmall-mysql-slave1-bin
## 设置二进制日志使用内存大小事务
binlog_cache_size1M
## 设置使用的二进制日志格式mixed,statement,row
binlog_formatmixed
## 二进制日志过期清理时间。默认值为0表示不自动清理。
expire_logs_days7
## 跳过主从复制中遇到的所有错误或指定类型的错误避免slave端复制中断。
## 如1062错误是指一些主键重复1032错误是因为主从数据库数据不一致
slave_skip_errors1062 重启slave容器 [rootlocalhost conf]# docker restart mysql-slave
mysql-slave查看启动的docker容器 [rootlocalhost conf]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f223b1736767 mysql:5.7 docker-entrypoint.s… 9 minutes ago Up 34 seconds 33060/tcp, 0.0.0.0:3308-3306/tcp, :::3308-3306/tcp mysql-slave
eac439fb07df mysql:5.7 docker-entrypoint.s… 24 minutes ago Up 15 minutes 33060/tcp, 0.0.0.0:3307-3306/tcp, :::3307-3306/tcp mysql-master在master主机上查看主从同步的状态 记录下Position的值 [rootlocalhost conf]# docker exec -it mysql-master /bin/bash
rooteac439fb07df:/# mysql -uroot -proot
mysql show master status;
------------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
------------------------------------------------------------------------------------
| mall-mysql-bin.000001 | 834 | | mysql | |
------------------------------------------------------------------------------------
1 row in set (0.00 sec) 进入 mysql-slave 容器 [rootlocalhost conf]# docker exec -it mysql-slave /bin/bash
rootf223b1736767:/# mysql -uroot -proot
mysql 按照如下格式在从数据库中配置主从复制 注意master_log_pos参数的值要和主机中的Position参数的值保持一致 change master to master_host宿主机ip, master_userslave,
master_password123456, master_port3307,
master_log_filemall-mysql-bin.000001, master_log_posPosition,
master_connect_retry30; mysql change master to master_host192.168.117.131, master_userslave,- master_password123456, master_port3307,- master_log_filemall-mysql-bin.000001, master_log_pos834,- master_connect_retry30;
Query OK, 0 rows affected, 2 warnings (0.01 sec)在从数据库中查看主从同步状态 mysql show slave status \G 在从数据库中开启数据同步 mysql start slave;
Query OK, 0 rows affected (0.00 sec) 查看从数据库状态 mysql show slave status \G 出现两个yes说明主从复制成功 测试主从复制效果
在主机创建数据库数据表
[rootlocalhost conf]# docker exec -it mysql-master /bin/bash
rooteac439fb07df:/# mysql -uroot -prootmysql create database mysql_db;
Query OK, 1 row affected (0.00 sec)mysql use mysql_db;
Database changedmysql create table stu(id int,name varchar(20),score double);
Query OK, 0 rows affected (0.01 sec)mysql insert into stu(id,name,score) values(1,eric,99.5);
Query OK, 1 row affected (0.01 sec)mysql select * from stu;
-------------------
| id | name | score |
-------------------
| 1 | eric | 99.5 |
-------------------
1 row in set (0.00 sec)
在从机查看数据是否同步
[rootlocalhost conf]# docker exec -it mysql-slave /bin/bash
rootf223b1736767:/# mysql -uroot -prootmysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| mysql_db |
| performance_schema |
| sys |
--------------------
5 rows in set (0.00 sec)mysql use mysql_db;mysql select * from stu;
-------------------
| id | name | score |
-------------------
| 1 | eric | 99.5 |
-------------------
1 row in set (0.00 sec)数据同步成功至此Docker下mysql数据库主从复制搭建完成