准备工作:
- 在两台机子上装Linux系统,我安装的是CentOS release 5.5 (Final),当然如果安装到虚拟机里也是可以的,两台在Windows系统上安装的虚拟机里的Linux系统也可以实现同步,我的就是在两台虚拟机里进行的;
- 安装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文件查看错误进行调试。