1.主从复制数据库实战环境准备

MySQL主从复制实践对环境的要求比较简单,可以是单机单数据库多实例的环境,也可以是两台服务器之间,每台服务器都部署一个独立的数据库的环境。本文以单机数据库多实例的环境进行实践。

2.主从复制服务器角色定义

序号 数据库角色 数据库IP信息 数据库port信息 数据库配置路径
1 master 192.168.1.20 3306 /data/3306
2 slave1 192.168.1.20 3307 /data/3307
3 slave2 192.168.1.20 3308 /data/3308

[root@bogon bin]# netstat -lntp | grep 330

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      24215/mysqld

tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      24521/mysqld

tcp        0      0 0.0.0.0:3308                0.0.0.0:*                   LISTEN      24806/mysqld

3.在主库master上执行如下配置操作
3.1.设置server-id值并开启binlog功能参数

由MySQL主从复制原理我们知道,要实现主从复制,关键是要开启binlog日志功能,所以,要打开主库的binlog日志参数。

3.1.1修改主库的配置文件/data/3306/my.cnf,执行vim /data/3306/my.cnf,按如下内容修改参数:

[mysqld]

server-id = 1                        #用于同步的实例server-id 都不能相同

log-bin = /data/3306/mysql-bin             #开启binlog日志功能

3.1.2检查修改后的参数:

[root@bogon mysql]# grep -E "server-id|log-bin" /data/3306/my.cnf

log-bin = /data/3306/mysql-bin

server-id = 1

3.1.3重启主库mysql服务

[root@bogon mysql]# /data/3306/mysql restart

3.1.4登录数据库,检查参数修改情况:

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

1 row in set (0.00 sec)

mysql> show variables like 'log_bin';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin       | ON    |

+---------------+-------+

1 row in set (0.00 sec)

经检测,主库的binlog功能以及开启;

3.2在主库上建立用于主从复制的账号

由主从复制的原理可知,从库要和主库同步,需有一个可以连接主库的账号,并且这个账号是在主库上建立的,权限允许从库连接主库并同步数据。

3.2.1在主库创建账号rep,具体操作如下:

mysql -uroot -p -S /data/3306/mysql.sock         #登录数据库;

mysql> grant replication slave on *.* to 'rep'@'192.168.1.%' identified by 'lb123456';  #创建rep账号;

3.2.2检查账号创建情况

mysql> use mysql;

mysql> select user,host from user where user='rep';

+------+-------------+

| user | host        |

+------+-------------+

| rep  | 192.168.1.% |

+------+-------------+

1 row in set (0.00 sec)

3.3在主库上锁表全备数据库,查看并记录主库状态信息;

3.3.1对主数据库进行锁表操作;

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.01 sec)

3.3.2锁表后查看主库状态

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000004 |      259 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

注意:需记录该命令显示的信息,后续从库需用到此信息;

3.3.3对主库数据进行全备,具体操作如下:

[root@bogon /]# mkdir -p /server/backup

[root@bogon /]# mysqldump -uroot -S /data/3306/mysql.sock  --events -A -B | gzip > /server/backup/mysql_bak_$(date +%F).sql.gz

[root@bogon /]# cd /server/backup

[root@bogon backup]# ll

total 144

-rw-r--r--. 1 root root 144803 Jun 14 14:59 mysql_bak_2016-06-14.sql.gz

3.3.4再次查看主库状态信息,确保数据导出期间,数据库没有数据变更;

[root@bogon backup]# mysql -uroot -S /data/3306/mysql.sock -e "show master status";

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000004 |      259 |              |                  |

+------------------+----------+--------------+------------------+

注意:binlog文件及位置点如果前后一致,即没有变化,则说明主库数据库在锁表导出数据前后数据库没有数据变更;

3.3.5解锁主库,恢复可写;

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

4.在从库slave1上执行如下配置操作

4.1.设置server-id值并关闭binlog功能参数

这里从库的server-id要和主库及其他从库的不同,并且注释从库的binlog参数配置

4.1.1修改主库的配置文件/data/3307/my.cnf,执行vim /data/3307/my.cnf,按如下内容修改参数:

[mysqld]

server-id = 2                        #用于同步的实例server-id 都不能相同

#log-bin = /data/3306/mysql-bin             #关闭binlog日志功能

4.1.2检查修改后的参数:

[root@bogon backup]# grep -E "server-id|log-bin" /data/3307/my.cnf

#log-bin = /data/3307/mysql-bin

server-id = 2

4.1.3重启主库mysql服务

[root@bogon mysql]# /data/3307/mysql restart

4.1.4登录数据库,检查参数修改情况:

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 2     |

+---------------+-------+

1 row in set (0.00 sec)

mysql> show variables like 'log_bin';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin       | OFF   |

+---------------+-------+

1 row in set (0.00 sec)

4.2把主库导出的数据恢复到从库slave1上;

[root@bogon /]# cd /server/backup/        #进入备份目录;

[root@bogon backup]# ll

total 144

-rw-r--r--. 1 root root 144803 Jun 14 14:59 mysql_bak_2016-06-14.sql.gz

[root@bogon backup]# gzip -d mysql_bak_2016-06-14.sql.gz      #解压备份数据库数据

[root@bogon backup]# ll

total 516

-rw-r--r--. 1 root root 527436 Jun 14 14:59 mysql_bak_2016-06-14.sql

[root@bogon backup]# mysql -uroot -S /data/3307/mysql.sock < mysql_bak_2016-06-14.sql #恢复slave1数据;

4.3登录从库slave1,配置复制参数

mysql> change master to

-> master_host='192.168.1.20',

-> master_port=3306,

-> master_user='rep',

-> master_password='lb123456',

-> master_log_file='mysql-bin.000004',

-> master_log_pos=259;

Query OK, 0 rows affected (0.16 sec)

4.4启动从库同步开关,查看复制状态

mysql> start slave;

Query OK, 0 rows affected (0.04 sec)

主从复制是否成功,最关键为下面3项参数:

[root@bogon backup]# mysql -uroot -S /data/3307/mysql.sock -e "show slave status\G" | grep -E "IO_Running|SQL_Running|Seconds_Behind_Master"

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Seconds_Behind_Master: 0

4.5测试主从复制结果

在主库创建新的数据库,然后观察从库的数据状况。

[root@bogon backup]# mysql -uroot -S /data/3306/mysql.sock -e "create database langyabang";   #在主库上创建新的数据库‘langyabang’;

[root@bogon backup]# mysql -uroot -S /data/3306/mysql.sock -e "show databases like 'langyabang'";

+-----------------------+

| Database (langyabang) |

+-----------------------+

| langyabang            |

+-----------------------+

#在主库上查看数据库‘langyabang’创建情况;

[root@bogon backup]# mysql -uroot -S /data/3307/mysql.sock -e "show databases like 'langyabang'";

+-----------------------+

| Database (langyabang) |

+-----------------------+

| langyabang            |

+-----------------------+

#在从库上查看主从复制情况;

根据测试主从是同步的。

转载于:https://blog.51cto.com/jeff1/1789141

mysql主从复制实践之单数据库多实例相关推荐

  1. mysql实践教学大纲_MySQL数据库基础实例教程(微课版)-教学大纲.doc

    <数据库基础>教学大纲 课程类别:专业必修课 适用对象:软件技术 总 学 时:60 其中:讲授学时:30 课内实践学时:30 一.课程的性质.任务与课程的教学目标 (一)课程的性质.任务 ...

  2. MySQL主从复制能完美解决数据库单点问题吗?

    一.单个数据库服务器的缺点 数据库服务器存在单点问题: 数据库服务器资源无法满足增长的读写请求: 高峰时数据库连接数经常超过上限. 二.如何解决单点问题 增加额外的数据库服务器,组建数据库集群: 同一 ...

  3. mysql单个查询_MySQL单表查询实例详解

    1.准备数据 以下操作将在该表中进行 create table student ( id int unsigned primary key auto_increment, name char(12) ...

  4. 查询mysql的服务名_数据库名实例名服务名

    数据库名:db_name数据库实例名:instance_name 操作系统环境变量:oracle_sid数据库服务名:service_names 数据库域名:db_domain全局数据库名:globa ...

  5. vue读取mysql数据_vue.js获取数据库数据实例代码

    vue.js动态获取数据库数据 (通过vue.cli和webpack搭建的环境) 1.首先我先在创建一个静态的data.json文件,在static下创建json文件夹,(webpack环境下,静态的 ...

  6. 【数据库七】搭建MySQL主从复制和读写分离详解

    详解搭建搭建MySQL主从复制和读写分离 1.案例实施:搭建MySQL主从复制 1.1 主节点数据库(CentOS 7-5) 1.2 从节点数据库(CentOS 7-6) 1.3 从节点数据库(Cen ...

  7. 菜鸟教程mysql创建表_MySQL 创建数据库 | 菜鸟教程

    MySQL 创建数据库 使用 mysqladmin 创建数据库 使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以 ...

  8. 死磕数据库系列(二十六):MySQL 高可用之单主、双主模型组复制配置实践

    点关注公众号,回复"1024"获取2TB学习资源! 前面我们学习:MySQL 高可用之组复制(MGR)技术的相关原理知识,今天我将详细的为大家介绍 MySQL 高可用技术组复制的单 ...

  9. MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 转载

    http://heylinux.com/archives/1004.html MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛 ...

最新文章

  1. 入行时间序列预测必读的4篇论文(附代码)
  2. IOS中的JSON数据的解析
  3. Typecho给文章设置永久链接
  4. 对称加密与非对称加密的区别_https原理及对称加密、非对称加密、数字证书、数字签名的含义...
  5. C++ using namespace
  6. 浦发银行招聘计算机类笔试题,2019浦发银行招聘计算机模拟试题及答案
  7. 当深度学习遇上量化交易——公开信息篇
  8. 比较重量 网易2016实习研发工程师编程题
  9. html给背景架渐变,JS和CSS实现渐变背景特效的代码
  10. python怎么读excelsheet_python怎么读写excel文件
  11. The best GraphQL Loader for Webpack
  12. Visual Studio 2015 移动跨平台开发初体验
  13. 分享:BlackHole开发日记-Java守护进程、Signal处理
  14. C++中关于使用while(cin)后,后续代码无法执行问题
  15. NVMe驱动解析-前言
  16. Python3爬取淘宝网商品数据
  17. 腾讯云OSS使用指南
  18. 关于大学生睡眠时间的调查
  19. python迅雷下载任务出错_迅雷下载时提示“任务出错”怎么办?小编教你(附多种解决方法)...
  20. 高并发如何处理,解决方案

热门文章

  1. flink 不设置水印_从0到1学习Flink—— Flink parallelism 和 Slot 介绍
  2. input css年月日,input标签的type为date,显示的日期格式样式更改
  3. linux创建文件内容三行,shell之创建文件及内容的方法示例
  4. php验证码图片乱码,php ,验证码图片,乱码
  5. matlab chan算法定位,MATLAB实现基于Chan氏算法的三维TDOA定位
  6. php追加数据,php追加数据到mysql
  7. 西南医科大学计算机应用基础历年真题,网络选修课-计算机应用基础-期末考.docx...
  8. php读取excel的数据,php读取excel文件数据
  9. php时分获取秒数,javascript与php时/分/秒与秒数互转
  10. mybatis if test 判断参数_什么?你还在if判断参数?Spring Boot 注解进行参数校验真香...