- 浏览: 150858 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
qiuxue126com:
学习了 !
nodejs http 发送请求 -
ZZX19880809:
一笑而过就好了,反正我不赶铁路
铁道部那坑爹的系统。
结构:
100
|
101 -- 102
[root@m/s/s ~]# 表示要在master slave slave三台服务器里都要执行的命令
[root@master ~]# 表示只在master服务器里执行的命令
[root@s/s ~]# 表示要在2台slave服务器里都要执行的命令
第一步,分别在3台机器上安装MySql,并使用MySql自带的my-medium.cnf作为初始配置文件,在3台服务器里分别执行如下命令。
[root@m/s/s ~]# yum -y install mysql mysql-server
[root@m/s/s ~]# cp -f /usr/share/doc/mysql-server-*/my-medium.cnf /etc/my.cnf
第二步,创建用于复制的账户,我们不管主从,在3台MySql创建相同用户名密码的用户。
1.首先启动MySql,并设置root密码,我这里是测试,所以你千万别把密码设置的这么简单。
[root@m/s/s ~]# /etc/init.d/mysqld start
[root@m/s/s ~]# /usr/bin/mysqladmin -u root password 'masterpass'
2.创建并授权用于从服务器复制的复制账户。
[root@m/s/s ~]# mysql -uroot -p
Enter password:
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.0.%' IDENTIFIED BY 'replpass';
Query OK, 0 rows affected (0.00 sec)
★:如果你了解MySql,可能你会说只需要在主服务器上添加一个从服务器用于复制的账户即可,
也不需要REPLICATION SLAVE权限,但是我这样做的好处有2个方面,1是监视和管理复制,
2是方便将来主从交换角色。
第三步,配置主(Master)服务器配置文件,此步在主(Master)里操作。
在/etc/my.cnf的[mysqld]域后追加
server_id 服务器ID,不要和别的服务器冲突了,在同一个局域网里,我习惯使用ip的最后一位
log_bin 显式的指定二进制日志的文件名
log_bin_index 注意这里指定的文件名不是记录的表的索引,而是记录了二进制日志的文件名
sync_binlog 设为1就是把MySql每次发生的修改和事件的日志即时同步到硬盘上
max_binlog_size 指定二进制日志的大小
添加完设置后,重启MySql,并确认主服务器状态。
[root@master ~]# /etc/init.d/mysqld restart
[root@master ~]# mysql -uroot -p
Enter password:
mysql> show variables like 'server%';
1 row in set (0.00 sec)
mysql> show master status;
1 row in set (0.00 sec)
可见,二进制日志已经开启并生效了,接下来该配置从(Slave)服务器了。
第三步,配置2台从(Slave)服务器配置文件,此步分别在2台从(Slave)里操作。
1.在192.168.0.101(从)的/etc/my.cnf的[mysqld]域后追加
2.在192.168.0.102(从)的/etc/my.cnf的[mysqld]域后追加
前面解释的参数,这里就不解释了。
log_slave_updates 让从服务器把自身复制的事件和记录都写到自己的二进制日志里
relay_log 中继日志
read_only 让从服务器只读,可以防止有人误从服务器插入数据,导致主从数据不一致。
slave-skip-errors 在复制过程中忽略一些错误,让复制继续进行,在这里我忽略了1062和1053号错误,如果要忽略所有错误就设成all
skip_slave_start 防止从服务器在崩溃后自动开启,以给你足够的时间修复。
另外,你可能发现我把主(Master)服务器里的一些配置,比如二进制日志的设置也拿过来了,同样是方便将来不停服务实现主从交换角色。
★:有人肯定要疑问了,为什么在从(Slave)服务器的配置里没有从主服务器复制的账户等相关信息?
回答:直接把这些的信息写到配置文件是没有好处的,根据一些高手的经验,还可以能出不可以预知的错误,因此我们将在下一步启动复制的时候,
在MySql命令行里执行命令来指定这些信息,这样做还有一个很大的好处,在我们要变换主服务器的时候不需要重启MySql。
★:关于过滤复制对象的问题,但是如果不是特殊需要,不要使用复制过滤,因为同样有几率在一些事件触发的时候导致一些错误。介绍几种过滤参数。
binlog_do_db 只复制指定的数据库(主服务器配置文件里设置)
binlog_ignore_db 不复制指定的数据库(主服务器配置文件里设置)
replicate_ignore_table 不复制指定的表(从服务器配置文件里设置)
replicate_wild_ignore_table 使用wild匹配来不复制的指定表(从服务器配置文件里设置),比如参数设为abc.%,表示不复制abc的所有表。
3.在2台从(Slave)服务器里重启MySql服务器
[root@s/s ~]# /etc/init.d/mysqld restart
★:因为我们是新装的MySql服务器,所以接下来我们就可以开启复制了,如果你是给已经有大量数据的MySql
服务器添加从(Slave)服务器,那么先从主(Master)服务器把数据导入到从(Slave)服务器里,让2者的数
据一致,然后再开启复制。最简单的方法就是关闭主服务器MySql的写入,用mysqldump工具导出所有主
(Master)服务器数据并上传到从(Slave)服务器:
[root@master ~]# mysqldump -u root -p --all-databases > /tmp/dbbackup.sql
[root@master ~]# scp /tmp/dbbackup.sql user@192.168.0.101:/tmp/dbbackup.sql
[root@master ~]# scp /tmp/dbbackup.sql user@192.168.0.102:/tmp/dbbackup.sql
[root@master ~]# rm -f /tmp/dbbackup.sql
然后把备份导入到从(Slave)服务器里:
[root@s/s ~]# mysql -u root -p < /tmp/dbbackup.sql
[root@s/s ~]# rm -f /tmp/dbbackup.sql
*-------------------------------------------------------------------------------*
* 如果你要在主服务器MySql正常运行的状态下进行热拷贝等方法,我建议你不要用mysqldump这个命令,-*
* 如果是MyISAM存储引擎,用mysqlhotcopy进行热备份会更好, -*
* 如果是InnoDB存储引擎,使用ibbacup这样的工具更好。 -*
*-------------------------------------------------------------------------------*
第四步,在从(Slave)服务器里开启复制,次步的操作在2台从(Slave)服务器里执行。
[root@s/s ~]# mysql -uroot -p
Enter password:
mysql>
Query OK, 0 rows affected (0.20 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS\G
1 row in set (0.00 sec)
最后我用了SHOW SLAVE STATUS来查看复制情况,从第一行可以看出从服务器已经在等待主服务器的
event了,也可以看到Slave_IO,Slave_SQL线程都正常开启,最好同时查看从(Slave)服务器的日
志/var/log/mysqld.log,确认没有错误信息,接下来你就可以去主服务器进行一些操作看看同步是
否正常。
另外,在上面的操作中MASTER_LOG_POS=0,这里0的意思是从日志开头开始复制的意思,并不是实际的日志里的位置,实际的日志里的开始位置默认应该是4。
★:有人觉得,数据分别保存在2个机器里,就认为备份不需要了,千万别这么想,只能说有助于备份,绝对不能替代备份。
到此为止,简单的主从配置就完了,但是真正要使用和管理好主从MySql服务器,不是靠这点知识就可以的。
100
|
101 -- 102
[root@m/s/s ~]# 表示要在master slave slave三台服务器里都要执行的命令
[root@master ~]# 表示只在master服务器里执行的命令
[root@s/s ~]# 表示要在2台slave服务器里都要执行的命令
第一步,分别在3台机器上安装MySql,并使用MySql自带的my-medium.cnf作为初始配置文件,在3台服务器里分别执行如下命令。
[root@m/s/s ~]# yum -y install mysql mysql-server
[root@m/s/s ~]# cp -f /usr/share/doc/mysql-server-*/my-medium.cnf /etc/my.cnf
第二步,创建用于复制的账户,我们不管主从,在3台MySql创建相同用户名密码的用户。
1.首先启动MySql,并设置root密码,我这里是测试,所以你千万别把密码设置的这么简单。
[root@m/s/s ~]# /etc/init.d/mysqld start
[root@m/s/s ~]# /usr/bin/mysqladmin -u root password 'masterpass'
2.创建并授权用于从服务器复制的复制账户。
[root@m/s/s ~]# mysql -uroot -p
Enter password:
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.0.%' IDENTIFIED BY 'replpass';
Query OK, 0 rows affected (0.00 sec)
★:如果你了解MySql,可能你会说只需要在主服务器上添加一个从服务器用于复制的账户即可,
也不需要REPLICATION SLAVE权限,但是我这样做的好处有2个方面,1是监视和管理复制,
2是方便将来主从交换角色。
第三步,配置主(Master)服务器配置文件,此步在主(Master)里操作。
在/etc/my.cnf的[mysqld]域后追加
server_id = 100 log_bin = mysql-bin log_bin_index = mysql-bin.index sync_binlog = 1 max_binlog_size = 200M
server_id 服务器ID,不要和别的服务器冲突了,在同一个局域网里,我习惯使用ip的最后一位
log_bin 显式的指定二进制日志的文件名
log_bin_index 注意这里指定的文件名不是记录的表的索引,而是记录了二进制日志的文件名
sync_binlog 设为1就是把MySql每次发生的修改和事件的日志即时同步到硬盘上
max_binlog_size 指定二进制日志的大小
添加完设置后,重启MySql,并确认主服务器状态。
[root@master ~]# /etc/init.d/mysqld restart
[root@master ~]# mysql -uroot -p
Enter password:
mysql> show variables like 'server%';
+------------------+----------+ | variable_name | Value | +------------------+----------+ | server_id | 100 | +------------------+----------+
1 row in set (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000004 | 98 | | | +------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
可见,二进制日志已经开启并生效了,接下来该配置从(Slave)服务器了。
第三步,配置2台从(Slave)服务器配置文件,此步分别在2台从(Slave)里操作。
1.在192.168.0.101(从)的/etc/my.cnf的[mysqld]域后追加
server_id = 101 log_bin = mysql-bin log_bin_index = mysql-bin.index log_slave_updates = 1 relay_log = mysql-relay-bin relay_log_index = mysql-relay-bin.index max_binlog_size = 200M read_only = 1 slave-skip-errors = 1062,1053 skip_slave_start = 1 Replicate_Do_DB = mobiadv Replicate_Ignore_DB = infomation_schma,mysql,performance_schema,test
2.在192.168.0.102(从)的/etc/my.cnf的[mysqld]域后追加
server_id = 102 log_bin = mysql-bin log_bin_index = mysql-bin.index log_slave_updates = 1 relay_log = mysql-relay-bin relay_log_index = mysql-relay-bin.index max_binlog_size = 200M read_only = 1 slave-skip-errors = 1062,1053 skip_slave_start = 1 Replicate_Do_DB = mobiadv Replicate_Ignore_DB = infomation_schma,mysql,performance_schema,test
前面解释的参数,这里就不解释了。
log_slave_updates 让从服务器把自身复制的事件和记录都写到自己的二进制日志里
relay_log 中继日志
read_only 让从服务器只读,可以防止有人误从服务器插入数据,导致主从数据不一致。
slave-skip-errors 在复制过程中忽略一些错误,让复制继续进行,在这里我忽略了1062和1053号错误,如果要忽略所有错误就设成all
skip_slave_start 防止从服务器在崩溃后自动开启,以给你足够的时间修复。
另外,你可能发现我把主(Master)服务器里的一些配置,比如二进制日志的设置也拿过来了,同样是方便将来不停服务实现主从交换角色。
★:有人肯定要疑问了,为什么在从(Slave)服务器的配置里没有从主服务器复制的账户等相关信息?
回答:直接把这些的信息写到配置文件是没有好处的,根据一些高手的经验,还可以能出不可以预知的错误,因此我们将在下一步启动复制的时候,
在MySql命令行里执行命令来指定这些信息,这样做还有一个很大的好处,在我们要变换主服务器的时候不需要重启MySql。
★:关于过滤复制对象的问题,但是如果不是特殊需要,不要使用复制过滤,因为同样有几率在一些事件触发的时候导致一些错误。介绍几种过滤参数。
binlog_do_db 只复制指定的数据库(主服务器配置文件里设置)
binlog_ignore_db 不复制指定的数据库(主服务器配置文件里设置)
replicate_ignore_table 不复制指定的表(从服务器配置文件里设置)
replicate_wild_ignore_table 使用wild匹配来不复制的指定表(从服务器配置文件里设置),比如参数设为abc.%,表示不复制abc的所有表。
3.在2台从(Slave)服务器里重启MySql服务器
[root@s/s ~]# /etc/init.d/mysqld restart
★:因为我们是新装的MySql服务器,所以接下来我们就可以开启复制了,如果你是给已经有大量数据的MySql
服务器添加从(Slave)服务器,那么先从主(Master)服务器把数据导入到从(Slave)服务器里,让2者的数
据一致,然后再开启复制。最简单的方法就是关闭主服务器MySql的写入,用mysqldump工具导出所有主
(Master)服务器数据并上传到从(Slave)服务器:
[root@master ~]# mysqldump -u root -p --all-databases > /tmp/dbbackup.sql
[root@master ~]# scp /tmp/dbbackup.sql user@192.168.0.101:/tmp/dbbackup.sql
[root@master ~]# scp /tmp/dbbackup.sql user@192.168.0.102:/tmp/dbbackup.sql
[root@master ~]# rm -f /tmp/dbbackup.sql
然后把备份导入到从(Slave)服务器里:
[root@s/s ~]# mysql -u root -p < /tmp/dbbackup.sql
[root@s/s ~]# rm -f /tmp/dbbackup.sql
*-------------------------------------------------------------------------------*
* 如果你要在主服务器MySql正常运行的状态下进行热拷贝等方法,我建议你不要用mysqldump这个命令,-*
* 如果是MyISAM存储引擎,用mysqlhotcopy进行热备份会更好, -*
* 如果是InnoDB存储引擎,使用ibbacup这样的工具更好。 -*
*-------------------------------------------------------------------------------*
第四步,在从(Slave)服务器里开启复制,次步的操作在2台从(Slave)服务器里执行。
[root@s/s ~]# mysql -uroot -p
Enter password:
mysql>
CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_PORT=3306, MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0;
Query OK, 0 rows affected (0.20 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS\G
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event #说明已经开始等主服务器数据写入 Master_Host: 192.168.0.100 Master_User: repluser Master_Port: 3306 ... ... Slave_IO_Running: Yes #IO开始同步正常 Slave_SQL_Running: Yes #SQL开始同步正常 Replicate_Do_DB:mobiadv Replicate_Ignore_DB:infomation_schma,mysql,performance_schema,test ... ...
1 row in set (0.00 sec)
最后我用了SHOW SLAVE STATUS来查看复制情况,从第一行可以看出从服务器已经在等待主服务器的
event了,也可以看到Slave_IO,Slave_SQL线程都正常开启,最好同时查看从(Slave)服务器的日
志/var/log/mysqld.log,确认没有错误信息,接下来你就可以去主服务器进行一些操作看看同步是
否正常。
另外,在上面的操作中MASTER_LOG_POS=0,这里0的意思是从日志开头开始复制的意思,并不是实际的日志里的位置,实际的日志里的开始位置默认应该是4。
★:有人觉得,数据分别保存在2个机器里,就认为备份不需要了,千万别这么想,只能说有助于备份,绝对不能替代备份。
到此为止,简单的主从配置就完了,但是真正要使用和管理好主从MySql服务器,不是靠这点知识就可以的。
发表评论
-
1111111
2014-12-23 15:13 0mysql> CHANGE MASTER TO MA ... -
111
2014-12-15 18:36 0#!/bin/bash if [ `uname -m ... -
MySQL 创建用户、授权
2014-01-03 22:44 687一, 创建用户: 命令: CREATE USE ... -
mysql中文乱码
2014-01-03 22:42 601php MySQL中文乱码问题: 处理方法:set name ... -
(转)MySQL增加用户
2013-12-25 14:25 642创建用户: 命令: CREATE USER 'username ... -
(转载)MySQL 列类型
2013-05-20 16:00 703MySQL支持大量的列类型,它可以被分为3类:数字类型、日 ... -
MySQL远程连接
2012-11-02 09:10 0MySQL远程连接问题: 新建用户: CREATE TABL ... -
铁道部那坑爹的系统。
2012-09-27 16:40 1403铁道部那坑爹的系统,原来也是用开源框架的。无非也就是strus ... -
JDBC-SQL的输出
2012-09-12 18:06 1542前几天,有个朋友问我,怎么输出JDBC对DB的SQL?当时没明 ... -
Java-JDBC层 大量的Setter/Getter方法解决办法
2012-09-04 16:10 1766话不多说,直接上代码。两代关于JDBC的代码,结果集到类对象的 ... -
oracle 取整的几种方法
2012-03-19 10:45 1002oracle 取整的几种方法 - 留着自个用 1.取整(大) ...
相关推荐
MySQL 主从同步配置过程 一、 MySQL 主从同步配置概述 MySQL 主从同步配置是指将 MySQL 数据库的数据从一台服务器(主服务器)同步到另一台服务器(从服务器)的过程。这种配置可以实现数据的高可用性和灾难恢复,...
淘宝资深工程师丁奇在2009年的分享中详细介绍了MySQL主从同步的原理、配置、优化以及在实际应用中遇到的问题和解决方案。 首先,MySQL主从同步的基本概念指的是在一个数据库实例(主库)上对数据进行修改操作后,...
MySQL主从同步配置和实现 MySQL主从同步是指将一个MySQL服务器的数据实时地复制到另一个或多个服务器上,以实现数据的高可用性和灾难恢复。这种方式可以实现数据的热备援、读写分离、负载均衡等功能。 1. 案例 1:...
### Linux下MySQL主从同步配置详解 #### 一、引言 在数据库管理领域,MySQL主从同步是一种常见的数据复制技术,它可以帮助我们构建高可用性和数据冗余性,从而提高系统的稳定性和可靠性。本文将详细介绍如何在Linux...
Linux-Mysql 主从同步配置 本文将详细解释 Linux-Mysql 主从同步配置的步骤和知识点。 一、主服务器配置 1. 编辑数据库配置文件 my.cnf, 一般在/etc/目录下。 2. 在[mysqld]下面加入以下代码: * log-bin=mysql...
MySQL主从同步是一种常见的数据库高可用性和数据冗余策略,它允许数据在多个服务器之间实时复制,确保即使在一台服务器故障时,数据仍然可以被访问。以下是对搭建、修改和优化MySQL主从同步过程的详细解释: 1. **...
在Windows环境下,MySQL主从同步备份是一种常见的高可用性和数据冗余策略,确保数据的安全性和一致性。以下是详细步骤,适用于MySQL 5.0版本: 1. **创建备份账户**: 在主服务器A上,我们需要创建一个用于复制的...
MySQL主从同步是一种数据库复制技术,它允许一个MySQL服务器(主服务器)的数据被实时地复制到其他服务器(从服务器)上。这种同步可以确保数据的一致性,并在主服务器出现问题时提供故障转移的能力。实现主从同步的...
Mysql主从同步备份策略 五月 18th, 2009 at 17:30 - 3,803 views 环境: 主从服务器上的MySQL数据库版本同为5.1.34 主机IP:192.168.0.1 从机IP:192.168.0.2 一. MySQL主服务器配置 1.编辑配置文件/etc/my.cnf # ...
mysql主从同步检查脚本 。主要运用于日常maysql运行主从同步状态检查。
MySQL主从同步是数据库高可用性和数据一致性的关键机制,特别是在大型分布式系统中。这个名为"MySql主从同步监控程序源码"的项目是用C#语言开发的,旨在帮助管理员实时监控MySQL数据库的主从复制状态,确保数据在...
MySQL 主从同步和一台服务器两个 MySQL MySQL 主从同步是指将一个 MySQL 服务器的数据实时地复制到另一个 MySQL 服务器上,以提高数据库的高可用性和灾难恢复能力。在本文中,我们将详细介绍如何在一台服务器上配置...
MySQL主从同步是一种数据库复制技术,它允许数据从一个MySQL服务器(称为“主服务器”)实时复制到另一个或多个服务器(称为“从服务器”)。这种配置对于数据备份、负载均衡和高可用性至关重要。在Java开发中,了解...
MySQL 主从同步及 Canal 配置详解 MySQL 主从同步是指将一个 MySQL 服务器的数据实时同步到另一个 MySQL 服务器上,以保证数据的一致性和高可用性。该技术主要基于 binlog 技术,下面将详细介绍 MySQL 主从同步的...
### Debian系统下MySQL主从同步复制 在Debian系统中实现MySQL主从同步复制是一种常见的数据库高可用性和负载均衡策略。这种技术可以确保数据的安全性并提高系统的整体性能。接下来,我们将详细介绍如何在Debian环境...
MySQL的主从同步是数据库高可用性和扩展性的重要策略,尤其在大型企业环境中,单一数据库服务器无法满足持续增长的业务需求。主从复制允许数据在主服务器(Master)和一个或多个从服务器(Slave)之间实时或近乎实时...
超详细MySQL主从配置和主主同步总结。。。。。。。。。
dble配置mysql主从同步