Linux下MySQL数据库同步配置

准备工作:

  1. 在两台机子上装Linux系统,我安装的是CentOS release 5.5 (Final),当然如果安装到虚拟机里也是可以的,两台在Windows系统上安装的虚拟机里的Linux系统也可以实现同步,我的就是在两台虚拟机里进行的;
  2. 安装mysql的准备工作,我这里使用的是从rpm安装mysql的方式,如何安装,请看下面:

要通过过yum命令去安装mysql数据库,必须给yum设置软件库

CentOS下运 行yum install flash-plugin或yum install mplayer的时候,提示库里没有找到这个软件?为什么会这样?因为CentOS是RHEL编译过来的,去掉了所有关于版权问题的东西。因此,在没有使 用第三方软件库的情况下,很多软件无法用yum install来直接安装。

EPEL(Extra Packages for Enterprise Linux )软件库提供为 EL4 及 EL5 重新编译的 Fedora 组件。这个软件库在不替换系统组件方面下了功夫。在某些情况下它尝试直接针对 CentOS 兼容性的问题,但坚决否定软件库间的兼容性是目标之一。当它与其它第三方软件库混合使用时,问题可能会出现。故此,当你使用 EPEL 时,尤其是当你亦会运用其它件库的组件时,请确保你使用 yum 的 Priorities 插件。

RPMForge库现在已经拥有超过10000种的CentOS的软件包,被CentOS社区认为是最安全也是最稳定的一个第三方软件库。

(1)首先,安装yum-priorities插件,原因如下:

这个插件是用来设置yum在调用软件源时的顺序的。因为官方提供的软件源,都是比较稳定和被推荐使用的。因此,官方源的顺序要高于第三方源的顺序。如何保证这个顺序,就需要安装yum-priorities这插件了。

[root@demeter2 log]# yum install yum-priorities

(2)安装完后设置/etc/yum.repos.d/ 目录下的.repo相关文件

如CentOS-Base.repo,在这些文件中插入顺序指令:priority=N (N为1到99的正整数,数值越小越优先)

一般的配置是这样的:

[base], [addons], [updates], [extras] … priority=1
[CentOSplus],[contrib] … priority=2
其他第三的软件源为:priority=N (推荐N>10)

如我的CentOS-Base.repo配置为:

************************************************************************************

# CentOS-Base.repo
[base]
 name=CentOS-$releasever – Base
 mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=os
 #baseurl=http://mirror.CentOS.org/CentOS/$releasever/os/$basearch/
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
 priority=1
#released updates
 [updates]
 name=CentOS-$releasever – Updates
 mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=updates
 #baseurl=http://mirror.CentOS.org/CentOS/$releasever/updates/$basearch/
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
 priority=1
#packages used/produced in the build but not released
 [addons]
 name=CentOS-$releasever – Addons
 mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=addons
 #baseurl=http://mirror.CentOS.org/CentOS/$releasever/addons/$basearch/
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
 priority=1
#additional packages that may be useful
 [extras]
 name=CentOS-$releasever – Extras
 mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=extras
 #baseurl=http://mirror.CentOS.org/CentOS/$releasever/extras/$basearch/
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
 priority=1
#additional packages that extend functionality of existing packages
 [CentOSplus]
 name=CentOS-$releasever – Plus
 mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=CentOSplus
 #baseurl=http://mirror.CentOS.org/CentOS/$releasever/CentOSplus/$basearch/
 gpgcheck=1
 enabled=0
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
 priority=2
#contrib – packages by CentOS Users
 [contrib]
 name=CentOS-$releasever – Contrib
 mirrorlist=http://mirrorlist.CentOS.org/?release=$releasever&arch=$basearch&repo=contrib
 #baseurl=http://mirror.CentOS.org/CentOS/$releasever/contrib/$basearch/
 gpgcheck=1
 enabled=0
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
 priority=2

************************************************************************************

(3)下载与安装相应EPEL的rpm文件包

下载与安装EPEL的rpm文件包(32位系统)

[root@CentOS ~]# rpm –Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

如果您不清楚您的系统内核,请使用 uname -a 命令来查看内核信息。

导入DAG的PGP Key

[root@CentOS ~]# rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL

(4)设置/etc/yum.repos.d/epel.repo文件中源的级别

就是添加priority=11这句

参考文档:http://wiki.centos.org/zh/AdditionalResources/Repositories/RPMForge

 

Mysql数据库的安装

[root@demeter2 log]# yum install mysql
[root@demeter2 log]# yum install mysql-server
Mysql的数据库目录 /var/lib/mysql

我们要在进行之前了解一下mysql的数据库目录

数据目录的位置

◆如果您是在一个源程序分发包中安装 MySQL,典型的缺省位置可能是 /usr/local/var;

◆如果在二进制分发包中安装 MySQL,则为 /usr/local/mysql/data;

◆在 RPM 文件中安装,为 /var/lib/mysql。

◆对于windwos平台上的分发,其位置时BASEDIRdata

数据目录的位置可以在启动服务器时通过–datadir = /path/to/dir明确地指定。如果想将数据目录放置在其他地方而非缺省的位置,则这个选项是有用的。

mysql数据库的文件类型

配置数据库同步

MySQL的主从同步是一个很成熟的架构,优点为:

①  在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;

②  在从主服务器进行备份,避免备份期间影响主服务器服务;

③  当主服务器出现问题时,可以切换到从服务器。所以我在项目部署和实施中经常会采用这种方 案;

不过我们这次做的是主主同步:

由安装好的Linux系统得到ip地址,并设定主主同步

A    192.168.15.250

B    192.168.15.251

/etc/my.cnf是mysql主要的配置文件,也是我们同步数据库的主要的配置文件

主要有以下几步:

在A,B两个mysql数据库里创建数据库,导入准备好的源文件/data/smmdb_testzj.sql

(1)启动mysql数据库

[root@demeter mysql]# /etc/init.d/mysqld start
Starting MySQL:                                             [  OK  ]

(2)登录A,B数据库,并创建数据库moon,用来做测试数据库

[root@demeter mysql]# mysql -uzhaojuan -p
mysql> set names ‘utf8’;
mysql> status;
--------------
mysql  Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i686) using readline 5.1
Connection id:          135
Current database:
Current user:           zhaojuan@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.77-log Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 5 days 10 hours 49 min 8 sec
Threads: 2  Questions: 752  Slow queries: 0  Opens: 111  Flush tables: 1  Open tables: 64  Queries per second avg: 0.002
mysql> create database moon;
Query OK, 0 rows affected (0.00 sec)
mysql> use moon;
Database changed
mysql> source /data/smmdb_testzj.sql;

PS:Server characterset,Db characterset,Client characterset,Conn. Characterset这几项要保证一致,才不至于之后出现乱码。

 

3)创建同步账号,并设置密码

mysql> create user ‘song’@’%’ identified by ‘112358s’;

‘%’是因为我们是主主同步,会有更多的机子访问数据库,所以设置账号从任何一台机子登录数据库都可以;

mysql> grant all on moon.* to ‘song’@’%’ identified by ‘112358s’;

(4)修改配置文件

A. 数据库的/etc/my.cnf 文件[mysqld]添加如下代码

[mysqld]
server-id=2                    #设置服务器id,主从服务器要不同
master-host=192.168.15.251     #master数据库的IP地址
master-user=song               #同步用户帐号
master-password=112358s        #同步用户的密码
master-port=3306               #使用mysql的数据库接口进行连接
master-connect-retry=60        #预设重试间隔60秒
replicate-do-db=moon           #告诉slave只做moon数据库的更新
log-error=/var/log/mysqlerror.log
#以上是slave端的配置,下面是作为master端的配置
log-bin = mysqllog
#启用二进制变更日志(即把所有对数据进行操作的SQL命令以二进制格式记入日志)
#其中mysqllog是日志文件的名称,日志的文件名是mysqllog.n,其中n是一个6位数字的整数
binlog-do-db = moon           #指定需要启用二进制变更日志的数据库"moon"
binlog-ignore-db = mysql      #指定不需要启用二进制变更日志的数据库"mysql"
log-slave-updates             #启用从属服务器上的日志同步功能

 

B. 数据库上的配置文件/etc/my.cnf 在[mysqld]添加如下代码

[mysqld]
log-bin = mysqllog
server-id = 1
binlog-do-db = moon
binlog-ignore-db = mysql           #前三条代码都是和master有关的,后面的是和slave有关的
master-host=192.168.15.250
master-user=song
master-password=112358s
replicate-do-db=moon
master-connect-retry=60
log-slave-updates               #启用从属服务器上的日志同步功能

 

5)查看配置是否正确,并启动同步服务

主要的查看命令是 show master status和show slave status

首先重启数据库服务:

[root@demeter2 log]# /etc/init.d/mysqld restart

登录mysql

[root@demeter2 log]# mysql -uzhaojuan -p
mysql> use moon;
mysql> show master status;
+-----------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+----------+--------------+------------------+
| mysqllog.000001 |       98 | moon         | mysql            |
+-----------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> show slave status G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.15.251
Master_User: song
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqllog.000005
Read_Master_Log_Pos: 450
Relay_Log_File: mysqld-relay-bin.000138
Relay_Log_Pos: 234
Relay_Master_Log_File: mysqllog.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: moon
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: 450
Relay_Log_Space: 234
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
1 row in set (0.00 sec)

(这就说明我们配置好了)

mysql> start slave;

(这样就启动了)

之后我们测试一下,看是否可以实现同步,基本上show master status和show slave status可以显示以上信息,就说明可以实现同步了,如果出错,可以参照/var/lib/mysql/mysqllog.XXXX文件查看错误进行调试。

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注