首页 数据库 mysql教程 MySQL数据库主从复制_MySQL

MySQL数据库主从复制_MySQL

Jun 01, 2016 pm 01:10 PM

  MySQL支持单向、异步复制,一台作为Master服务器、多台作为Slave服务器。
    MySQL主从复制通常采用单主星型结构,如A-->B、A-->C;当然,也可以采用链式结构,如A-->B-->C。
    主服务器将更新写入二进制日志文件(log-bin),并传递给从服务器再执行一次。通常情况下,一旦主服务器的日志文件更新,从服务器就会立即启动复制,只要网络和硬件性能足够,这个延迟会非常小(趋于0是差不多就是同步了)。
    主、从服务器均保持在线,允许同时对外提供服务,也相当于一种负载均衡(只读的)。
    从服务器可以设置为只读,以避免误操作造成的不一致性,也因此可以将数据库查询、更新分离(A可读可写,B/C只读)。
 
############################################################################## 
 
系统环境: 
    RHEL 5.5 [2.6.18-194.el5] 
 
软件环境: 
    mysql-server-5.0.77-4.el5_4.2
    mysql-5.0.77-4.el5_4.2     采用RHEL5自带的RPM包安装,主、从服务器都装上,默认的数据库目录位于 /var/lib/mysql/
 
############################################################################## 
 
一、MySQL主服务器(server105,192.168.4.105) 1. 备份现有库   方法1,在线热备份:
[root@server105 ~]# mysqldump -u root -p --all-databases > /tmp/mysql-master.sql   方法2,二进制冷备:
[root@server105 ~]# service mysqld stop        #//也可以不停止,改为锁定(mysql> FLUSH TABLES WITH READ LOCK;)
[root@server105 ~]# cd /var/lib/mysql/
[root@server105 mysql]# tar zcpvf /tmp/mysql-master.tar.gz ./
[root@server105 mysql]# service mysqld start
2. 修改my.cnf配置,重启mysqld服务
[root@server105 ~]# cp /etc/my.cnf /etc/my.cnf.origin
[root@server105 ~]# vim /etc/my.cnf
[mysqld]
.. ..
log-bin=mysql-bin       #//使用二进制日志文件
server-id=1      #//指定服务器标识,参与复制的每台服务器不能相同
innodb_flush_log_at_trx_commit=1   #//提高InnoDB复制的耐受性、一致性
sync-binlog=1       #//启用日志同步
.. .. [root@server105 ~]# service mysqld restart
3. 创建复制账户
    对于仅执行复制的账户,只要授予 REPLICATION SLAVE 权限就够了;
    如果计划让从服务器使用 LOAD 方式导入主库(LOAD DATA FROM MASTER、LOAD TABLE FROM MASTER),还需要授予 SUPER、RELOAD 全局权限,以及对相关库表的 SELECT 权限。在执行 LOAD 操作时对于无 SELECT 权限的表将会被忽略到,从而易造成主从的不一致性。 [root@server105 ~]# mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO  'replicater'@'192.168.4.%' IDENTIFIED BY  'pwd @123 '; 或者 [root@server105 ~]# mysql -u root -p
mysql> GRANT REPLICATION SLAVE,SUPER,RELOAD,SELECT ON *.* TO  'replicater'@'192.168.4.%' IDENTIFIED BY  'pwd @123 ';
4. 确认主库状态
    记下日志文件名(mysql-bin.000005)、偏移量(3586),从服务器首次复制时需要用到 mysql> SHOW MASTER STATUS;
+----------------    -+------------------+-------------------+----------------------+
|  File               |  Position        | Binlog_Do_DB      |  Binlog_Ignore_DB    |
+---------------------+------------------+-------------------+----------------------+
|  mysql-bin.000005   |      3586        |                   |                      |
+---------------------+------------------+-------------------+----------------------+
1 row in set (0.00 sec)     二、MySQL从服务器(server205,192.168.4.205) 1. 导入现有库(主库的备份)   方法1,在线热导入:
[root@server205 ~]# scp 192.168.4.105:/tmp/mysql-master.sql /tmp/
[root@server205 ~]# mysql -u root -p [root@server205 ~]# service mysqld stop
[root@server205 ~]# rm -rf /var/lib/mysql/*                 #//此步骤可选
[root@server205 ~]# scp 192.168.4.105:/tmp/mysql-master.tar.gz  /tmp/
[root@server205 ~]# tar zxpvf /tmp/mysql-master.tar.gz -C /var/lib/
[root@server205 ~]# service mysqld start
2. 修改my.cnf配置,重启mysqld服务
[root@server205 ~]# cp /etc/my.cnf /etc/my.cnf.origin
[root@server205 ~]# vim /etc/my.cnf
[mysqld]
.. ..
log-bin=mysql-bin       #//使用二进制日志文件
server-id=2      #//指定服务器标识,参与复制的每台服务器不能相同
innodb_flush_log_at_trx_commit=1   #//提高InnoDB复制的耐受性、一致性
sync-binlog=1       #//启用日志同步 [root@server205 ~]# service mysqld restart
3. 启动从库复制 1)首次复制操作
[root@server205 ~]# mysql -u root -p
mysql> CHANGE MASTER TO MASTER_HOST='192.168.4.105',
MASTER_USER='replicater',
MASTER_PASSWORD='pwd @123 ',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=3586; mysql> SLAVE START;                      #//启用从库复制 2)查看连接信息
[root@server205 ~]# head /var/lib/mysql/master.info      #//连接信息会存于此文件,提供给mysqld服务调用
14
mysql-bin.000005
3586
192.168.4.105
replicater
pwd @123
3306
60
0
.. .. 3)确认复制状态
mysql> SHOW SLAVE STATUS/G
******************************* 1. row **********************************
  Slave_IO_State: Waiting for master to send event
  Master_Host: 192.168.4.105
  Master_USER: replicater
  Master_Port: 3306
  Connect_Retry: 60
  Master_Log_File: mysql-bin.000005
  Read_Master_Log_Pos: 3586
  Relay_Log_File: mysqld-relay-bin-bin.000016
  Relay_Log_Pos: 372
  Relay_Master_Log_File: mysql-bin.000005
  Slave_IO_Running: Yes            #//从服务器的IO线程已运行
  Slave_SQL_Running: Yes           #//从服务器的SQL线程已运行
  .. ..
  .. ..
  Seconds_Behind_Master: 0         #//此项可反映主-->从复制延迟,0为最理想状态(无延迟)
1 row in set (0.00 sec)
4. 调整服务脚本,重启mysqld服务
    通过修改start()函数的执行语句,可以调控mysqld服务的启动选项。例如:
--log-slave-updates=1              #//记录从库更新,以便允许链式复制
--read-only                        #//将从库设为只读,仅允许从服务器线程或具有SUPER权限的用户执行
--relay-log=mysqld-relay-bin       #//使用固定的中继日志文件
--report-host=server205            #//报告给主服务器的主机名或IP地址
--slave_compressed_protocol=1      #//复制过程启用压缩,若启用此项,主、从服务器都应该添加
--replicate-do-db=mysql            #//仅复制指定的库,其他库将被忽略,此选项可设置多条(省略时复制所有库)
--replicate-do-db=mytestdb
--replicate-ignore-db=test         #//不复制(忽略)指定的库,此选项也可以设置多条,do和ignore用其中一种就可以了
--skip-slave-start                 #//服务器启动时跳过复制,需要手动 SLAVE START
--slave-net-timeout=60             #//当从服务器网络中断时,再次重试之前等待的时间(默认为60秒)
--master-connect-retry=60          #//当主服务器连接丢失时,再次重试之前等待的时间(默认为60秒)
.. .. [root@server205 ~]# vim /etc/init.d/mysqld
.. ..
sart() {
    .. ..
    EXTRA_ARGS="--log-slave-updates=1 --read-only --relay-log=mysqld-relay-bin --report-host=server205 --slave_compressed_protocol=1 --replicate-do-db=mysql -- replicate-do-db=mytestdb"
    /usr/bin/mysqld_safe --datadir="$datadir" --socket="$socketfile" /
            --log-error="$errlogfile" --pid-file="$mypidfile" /
            --user=mysql $EXTRA_ARGS > /dev/null 2>&1 &
    ret=$?
    .. ..
}
.. .. [root@server205 ~]# service mysqld restart  
三、验证主、从同步效果 1. 在主服务器上,执行更新操作
    针对配置为执行复制的库,可以做建库/删库、建表/删表、添加/修改/删除表记录等各种更新操作。 2. 在从服务器上,观察数据库的变化
    通过SELECT查询确认结果,与主服务器的数据库操作结果一致,几乎是实时的。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

说明InnoDB全文搜索功能。 说明InnoDB全文搜索功能。 Apr 02, 2025 pm 06:09 PM

InnoDB的全文搜索功能非常强大,能够显着提高数据库查询效率和处理大量文本数据的能力。 1)InnoDB通过倒排索引实现全文搜索,支持基本和高级搜索查询。 2)使用MATCH和AGAINST关键字进行搜索,支持布尔模式和短语搜索。 3)优化方法包括使用分词技术、定期重建索引和调整缓存大小,以提升性能和准确性。

如何使用Alter Table语句在MySQL中更改表? 如何使用Alter Table语句在MySQL中更改表? Mar 19, 2025 pm 03:51 PM

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

与MySQL中使用索引相比,全表扫描何时可以更快? 与MySQL中使用索引相比,全表扫描何时可以更快? Apr 09, 2025 am 12:05 AM

全表扫描在MySQL中可能比使用索引更快,具体情况包括:1)数据量较小时;2)查询返回大量数据时;3)索引列不具备高选择性时;4)复杂查询时。通过分析查询计划、优化索引、避免过度索引和定期维护表,可以在实际应用中做出最优选择。

可以在 Windows 7 上安装 mysql 吗 可以在 Windows 7 上安装 mysql 吗 Apr 08, 2025 pm 03:21 PM

是的,可以在 Windows 7 上安装 MySQL,虽然微软已停止支持 Windows 7,但 MySQL 仍兼容它。不过,安装过程中需要注意以下几点:下载适用于 Windows 的 MySQL 安装程序。选择合适的 MySQL 版本(社区版或企业版)。安装过程中选择适当的安装目录和字符集。设置 root 用户密码,并妥善保管。连接数据库进行测试。注意 Windows 7 上的兼容性问题和安全性问题,建议升级到受支持的操作系统。

如何为MySQL连接配置SSL/TLS加密? 如何为MySQL连接配置SSL/TLS加密? Mar 18, 2025 pm 12:01 PM

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什么? 哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什么? Mar 21, 2025 pm 06:28 PM

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

InnoDB中的聚类索引和非簇索引(次级索引)之间的差异。 InnoDB中的聚类索引和非簇索引(次级索引)之间的差异。 Apr 02, 2025 pm 06:25 PM

聚集索引和非聚集索引的区别在于:1.聚集索引将数据行存储在索引结构中,适合按主键查询和范围查询。2.非聚集索引存储索引键值和数据行的指针,适用于非主键列查询。

您如何处理MySQL中的大型数据集? 您如何处理MySQL中的大型数据集? Mar 21, 2025 pm 12:15 PM

文章讨论了处理MySQL中大型数据集的策略,包括分区,碎片,索引和查询优化。

See all articles