热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql主从复制实践之单数据库多实例

1.主从复制数据库实战环境准备    MySQL主从复制实践对环境的要求比较简单,可以是单机单数据库多实例的环境,也可以是

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

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

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

序号数据库角色数据库IP信息数据库port信息数据库配置路径
1master192.168.1.203306/data/3306
2slave1192.168.1.203307/data/3307
3slave2192.168.1.203308/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

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            |

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

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

根据测试主从是同步的。






推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
author-avatar
手机用户2502902237
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有