`

史上最详细MySQL5.5复制配置步骤,与以前版本的有所不同

 
阅读更多

史上最详细MySQL5.5复制配置步骤,与以前版本的有所不同

操作系统:CentOS 5.8

MySQL版本:5.5.x

原来状况:数据库在一台机器上,已经有一些生产数据

目标:主主复制。两台数据库服务器设置成主主复制方式,即对任何一台的更改都会自动同步到另外一台。

第一台:ip地址为 xxx.xxx.xxx.156  主机名 s156

第二台:ip地址为 xxx.xxx.xxx.170  主机名 s170

注:本文中的ip地址均采用 xxx. 形式,运用时根据实际情况修改。

本文链接:http://codingstandards.iteye.com/blog/1535994 转载请注明出处

 

操作步骤一:停止应用运行

在修改mysql配置之前,应该停止与数据库有关的进程(程序),比如:

1. tomcat或其他Web应用容器

使用 service tomcat stop 停止

或者进入 tomcat/bin 执行 ./shutdown.sh)

2. crontab 里面设置的某些与数据库有关的定时任务。

比如:那些检测tomcat是否启动的定时任务。

可以先用 crontab -e 打开,把相应项注释掉(在前面加#号)。

3. 其他与数据库有关的进程。

 

 

操作步骤二:检查主机名

什么情况下需要修改主机名?

如果发现shell命令行提示符是

[root@localhost ~]#

或者用hostname命令得到主机名是localhost

[root@localhost ~]# hostname
localhost

 

为什么需要确认主机名是否正确?

1. 因为有些时候,安装系统的人比较懒,没有在安装时设置主机名;

2. mysql运行时生成日志文件需要用到主机名,尤其是配置成复制(replication)后;

3. 如果在配置了复制之后再进行修改主机名,会造成mysql执行错误,这是我曾经碰到过的情况。

 

如果不需要修改主机名,跳到下一个步骤。

 

注意:需要对两台服务器检查和修改。

 

修改主机名的步骤:

1. 停止与主机名有关系的程序或服务,比如mysql(它生成的日志文件名中包含主机名)

service mysql stop

2. 使用hostname命令修改主机名(假定新主机名为newname)

hostname newname

比如:hostname s156

3. 在/etc/hosts文件中配置主机名的解析(假定ip地址记为ip,主机名newname,域名为yourdomain.com)

127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6

ip   newname.yourdomain.com newname

比如:xxx.156 s156.hndy16.com s156

4. 在/etc/sysconfig/network中修改HOSTNAME=newname

比如:HOSTNAME=s156

5. 最好重启机器,如果不允许的话,重新登录也行

重启使用 reboot 命令

重新登录使用 exit 命令

6. 看一下命令行提示符和hostname是否正确

[root@s156 ~]# hostname
s156

7. 重新启动第一步中停止的程序或服务,比如mysql

service mysql start

 

操作步骤三: 创建复制账号

需要在两台数据库上创建,假定用户名和密码都是rep。

 

先登录mysql

mysql -pxxx

创建用户账号,只赋予slave权限
grant replication slave on *.* to 'rep'@'xxx.170' identified by 'rep';

清空所有表和块写入语句
flush tables with read lock;

 

PS:2012.06.08

如果真的用rep账号去登录,就会只看到两个数据库。

[root@s170 ~]# mysql -prep -urep -hxxx.156
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12718
Server version: 5.5.24-log MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.01 sec)

mysql> quit
Bye
[root@s170 ~]#

 

操作步骤四:手工复制数据库

如果两台服务器都是新装的,可以跳过这一步。

 

如果原来单机上有数据,那么需要将数据复制到另外一台上面,让它们在开始复制之前的状态相同。

 

有两种方式:

1. 复制文件法:将数据库的数据文件直接复制到另外一台;

2. 使用 mysqldump 工具导出数据,然后导入到另外一台。

注意:不是所有的数据需要复制,比如 mysql 数据库、information_schema 数据库 和 performance_schema 数据库。

如果 test数据库中没有什么重要数据,也不必复制。

 

我经常采用第2种方式:

mysqldump -pxxx --default-character-set=gbk dbname >dbname.sql

tar zcf dbname.tar.gz dbname

 

通过sftp传到另外一台上面

sftp other_hostname

put dbname.tar.gz

quit

 

或者从另外一台机器上sftp

sftp source_hostname

get dbname.tar.gz

quit

 

将数据解压

tar zxf dbname.tar.gz

导入到数据库中

mysql -pxxx --default-character-set=gbk <dbname.sql

 

操作步骤五:停止mysql服务

操作命令是

service mysql stop

 

此步的目的是避免数据库中的数据在我们修改配置文件时被修改。

当然如果所有与数据库有关的应用程序和定时任务都已经停止,那么应该不会出现这种情况。

但是,不怕一万,就怕万一。

 

操作步骤六:修改mysql配置文件

配置文件 /etc/my.cnf

这是其中一台的配置,另外一台稍作修改就可以了。

s156上 /etc/my.cnf 写道
[client]
default-character-set=gbk

[mysqld]
#default-character-set=gbk
character-set-server=gbk
# server
server-id=156
log-bin=mysql-bin
binlog-ignore-db=mysql
# replication
#master-host=xxx.170
#master-port=3306
#master-user=rep
#master-password=rep
#master-connect-retry=60
# auto_incr
auto_increment_offset=1
auto_increment_increment=2
 

 

另外一台机器上的配置

s170上 /etc/my.cnf 写道
[client]
default-character-set=gbk

[mysqld]
#default-character-set=gbk
character-set-server=gbk
# server
server-id=170
log-bin=mysql-bin
binlog-ignore-db=mysql
# replication
#master-host=xxx.156
#master-port=3306
#master-user=rep
#master-password=rep
#master-connect-retry=60
# auto_incr
auto_increment_offset=2
auto_increment_increment=2
 

要点1:默认字符集都应该一样,比如gbk:

[client] 的配置名称为 default-character-set

[mysqld] 的配置名称为 character-set-server  (注:与以前版本的mysql不同,5.5版不认识 default-character-set)

 

要点2:server-id 要互不相同才行,可以是任意的正整数

为了更容易清楚是那一台服务器,可以设置为 ip地址的最后那个数字。

 

要点3:log-bin 和 binlog-ignore-db 配置

以前版本的mysql,binlog-ignore-db 项也可以配置成 set-variable=binlog-ignore-db=mysql,但5.5版不行了。

 

要点4:不能配置 master-host 等项

上面的几个配置文件中 master-host, master-port, master-user, master-password 等项都注释掉了,因为5.5版不支持这种配置方式了,

要改用 change master to 语句(在后面的步骤中会使用)

 

要点5:自动递增的设置

在使用mysql做数据库时,经常会使用 auto_increment 整数类型的字段作为主键,这种主键由mysql服务器生成,每次自动递增1。

如果是在主主复制方式下,就会产生冲突,即有可能两台服务器产生同一主键值。

所以 mysql 提供了 auto_increment_offset 和 auto_increment_increment 配置项,

其中 auto_increment_increment 是每次递增的数值,应该大于等于复制集群中服务器的数量,比如在主主复制中可以设置为2;

auto_increment_offset 是基数,可以从1开始到auto_increment_increment,每台服务器应该不同,比如一台设置为1,另外一台设置2。

注意:如果是应用程序模拟生成自动递增,可能需要修改应用程序。

 

PS: 2012.06.08

如果只复制特定的数据库,可以加入如下配置(假定数据库名为qzt)

binlog-do-db=qzt

replicate-do-db=qzt

 

操作步骤七:启动mysql服务

service mysql start

 

如果不能启动,那么就要查看 /var/lib/mysql/*.err 文件的内容去分析启动失败的原因,修改一下配置文件再重新启动。

 

 

操作步骤八:更改 master 设置

由于5.5版不再支持配置文件中直接设置 master-host 等数据,只能使用 change-master-to 命令,如下所示:

CHANGE MASTER TO
MASTER_HOST='master_host_name',
MASTER_USER='replication_user_name',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='recorded_log_file_name',
MASTER_LOG_POS=recorded_log_position;

 

 

注意:两台服务器上都要执行

 

实际例子:

在s156上

change master to master_host='xxx.170', master_port=3306, master_user='rep', master_password='rep';

在s170上

change master to master_host='xxx.156', master_port=3306, master_user='rep', master_password='rep';

 

之后启动从服务器线程

start slave 或者  slave start

 

 

执行示例:

mysql> change master to master_host='xxx.156', master_port=3306, master_user='rep', master_password='rep';
Query OK, 0 rows affected (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

 

 

操作步骤九:确认并验证配置

使用 show slave status\G 查看从服务器状态。

使用 SHOW VARIABLES LIKE 'auto_inc%'; 查看自动递增设置。

在一台上创建测试表、插入和更新数据,到另外一台上是否被复制。

 

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: xxx.170
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 107
               Relay_Log_File: s156-relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 107
              Relay_Log_Space: 408
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 170
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 2     |
| auto_increment_offset    | 1     |
+--------------------------+-------+
2 rows in set (0.00 sec)

 

mysql> use test
Database changed
mysql> create table test1 (id integer not null primary key);    
Query OK, 0 rows affected (0.00 sec)

 

在另外一台看看是否复制过来了

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test1          |
+----------------+
1 rows in set (0.00 sec)

 

更多的确认测试可自行进行,比如:insert/update/delete等操作。

 

操作步骤十:恢复应用运行

与操作步骤一对应,要把应用程序和定时任务恢复过来。

 

比如:

1. tomcat等应用服务器。

2. crontab中的与数据库有关的定时任务。

3. 其他与数据库有关的程序。

 

 

配置结束,大功告成!

 

 

 

 

 

 

 

 

 

 

 

 

 

14
11
分享到:
评论
7 楼 yujicun 2012-05-22  
6 楼 zhang070809 2012-05-22  
5 楼 java梦之翼 2012-05-22  
很不错 LZ辛苦了
4 楼 wxy5001 2012-05-21  
楼主,弱弱的问一下,有一个问题一直没想明白,

这种复制在这种情况下是如何的? 

有 table1 表有一人字段 name 有唯一索引,

要是这时候WEB1连接 数据库1,WEB连数据库2  都同时插入了相同的一个name值的话,怎么办呢? 如果这种情况下数据是怎么处理的?是在数据某一个事务提交时就抛异常吗?
3 楼 rox 2012-05-21  
写怎么长,辛苦了!
2 楼 xieye 2012-05-21  
  
1 楼 shirne 2012-05-21  
不错,很详细,记一下

相关推荐

    mysql5.5版本和配置文件的详细说明

    MySQL 5.5是MySQL数据库管理系统的一个重要版本,它在性能、稳定性以及功能上都有显著提升,对于初学者来说,了解其配置文件的详细信息至关重要。MySQL的配置文件,通常称为`my.cnf`或`my.ini`,是控制数据库服务器...

    Mysql5.5安装步骤详细图解

    以下是对Mysql5.5安装步骤的详细图解: 1. **下载安装包**: 首先,你需要从官方网站或者可信的第三方资源下载MySQL 5.5的安装包,例如`Mysql-5.5.18-win32.msi`。这是一个适用于Windows 32位系统的安装程序。 2....

    Mysql5.5版本及其安装和配置

    本篇文章将详细讲解MySQL 5.5的安装过程以及配置步骤,帮助你全面理解这个开源数据库系统的核心特性。 首先,我们来了解MySQL的基本概念。MySQL是一种关系型数据库管理系统(RDBMS),它遵循ACID(原子性、一致性、...

    centos 6.5配置mysql5.5

    ### CentOS 6.5 配置 MySQL 5.5 的详细步骤 在 CentOS 6.5 上安装并配置 MySQL 5.5 是一项常见的任务,尤其是对于那些希望在服务器环境中部署稳定、可靠的数据库服务的系统管理员来说。本文将详细介绍如何在 CentOS...

    mysql5.1升级mysql5.5操作步骤

    这一步非常重要,因为它能够确保所有数据和配置都与新版本兼容。 通过以上步骤,您可以顺利完成从 MySQL 5.1 到 MySQL 5.5 的升级。需要注意的是,在整个升级过程中,建议始终参考 MySQL 官方文档以获取最准确的...

    MySQL安装文件MySQL5.5.zip

    标题中的"MySQL安装文件MySQL5.5.zip"指的是包含MySQL 5.5版本安装程序的压缩包。这个压缩文件通常包含了安装MySQL所需的所有组件,包括服务器、客户端工具、连接器以及相关的文档。"mysql-5.5.21.msi"是MySQL ...

    MySQL5.5.zip_mySql chm_mysql 5.5_mysql 中文_mysql5.5_mysql5.5.chm

    手册会详细解释MySQL的安装与配置、SQL语法、数据库设计、索引优化、备份恢复、复制与集群等关键概念和操作步骤。通过阅读和实践,你将能够掌握MySQL 5.5的精髓,成为一名熟练的MySQL数据库管理员或开发者。

    MySQL5.5绿色版(免安装)

    MySQL5.5版本在功能上进行了许多优化和增强,例如InnoDB存储引擎的改进,使其支持更多的并发事务,并且提高了事务处理的性能。此外,它还引入了更高效的查询优化器,能更好地解析和执行SQL语句,确保了数据查询的...

    mysql5.5安装版本

    MySQL 5.5是MySQL数据库管理系统的一个重要版本,它在2010年发布,带来了许多新特性、改进和性能优化。在这个版本中,MySQL致力于提高数据处理速度、稳定性以及安全性,使其更适合大规模的企业级应用。 一、安装...

    mysql5.5免安装.rar

    解压“mysql5.5免安装.rar”后,用户需要按照提供的说明文件进行配置。通常,这会包括设置环境变量,如PATH,以便系统能找到MySQL的可执行文件;配置my.ini或my.cnf文件以指定数据库的初始化参数,如端口、数据文件...

    mysql-5.5安装程序和详细过程

    在本篇文章中,我们将详细介绍MySQL 5.5的安装过程,帮助您顺利地在您的计算机上配置这个强大的数据库系统。 首先,我们需要下载MySQL 5.5的安装程序。在提供的文件列表中,我们看到了`mysql-5.5.20-win32.msi`,这...

    MySQL5.5多实例安装配置文件

    MySQL5.5启动多实例详细配置文件,多实例安装方法可参考博文:Centos6.10采用cmake编译安装MySQL5.5多实例安装

    MySQL5.5中文版

    MySQL5.5中文版是MySQL数据库管理系统的一个重要版本,它为用户提供了稳定、高效和功能丰富的数据存储解决方案。MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,后来被甲骨文公司收购...

    MySQL5.5的安装包

    安装MySQL 5.5的一键安装包意味着用户无需手动配置各种参数或安装依赖项,只需按照简单的步骤操作即可完成安装。通常,这种安装包会包含所有必要的组件,如MySQL Server、MySQL客户端工具、配置脚本等,确保安装过程...

    mysql5.5版本含安装教程

    本教程将详细讲解如何下载、安装以及配置MySQL 5.5,帮助您顺利掌握这一数据库系统的操作。 首先,**下载MySQL 5.5**:在MySQL官方网站上,您可以找到历史版本的下载链接。选择适合您操作系统的版本,如Windows、...

    mysql5.5安装程序

    以下是关于“mysql5.5安装程序”的详细知识点: 1. **MySQL 5.5的主要改进**: - **性能优化**:MySQL 5.5引入了InnoDB存储引擎的并行插入,提高了写入性能。此外,查询优化器也进行了升级,对于复杂查询的处理...

    mysql5.5安装包、图形化界面

    MySQL 5.5是MySQL数据库管理系统的一个重要版本,它提供了许多增强的功能和性能优化,使得这个版本成为当时很多企业和开发者的首选。在这个压缩包中,包含的是MySQL 5.5的Windows 32位安装程序以及一个图形化界面...

    Ubuntu 通过Deb 安装 MySQL 5.5

    ### Ubuntu 通过 Deb 包安装 MySQL 5.5 的详细步骤及注意事项 #### 一、前言 在 Ubuntu 系统上安装 MySQL 数据库是一项常见的任务,尤其对于开发者和系统管理员来说更是如此。本文将详细介绍如何通过 Debian 匹配...

Global site tag (gtag.js) - Google Analytics