[整理:张子萌 2009-10-12]
操作系统:CentOS
数据库版本:mysql-5.1.44-linux-i686-glibc23.tar.gz
A服务器: 192.168.1.100 主服务器(master)
B服务器: 192.168.1.101 从服务器(slave)
主副服务器安装比较简单,此处只列安装顺序的命令。
详细操作可以见http://simon-zzm.blog.163.com/blog/static/88809522201028104721790/中mysql部分。
1. mysql安装
在主从服务器上做以下操作。
# groupadd -g700 mysql
# useradd -g700 -u700 mysql mysql
# tar zxvf mysql-5.1.44-linux-i686-glibc23.tar.gz
# cp mysql-5.1.44-linux-i686-glibc23 /usr/local/mysql
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
# chown -R mysql:mysql /usr/local/mysql
2. 配置主服务器
2.1 登录主服务器。初始化数据库,并启动
# /usr/local/mysql/scripts/mysql_install_db –user=mysql
–basedir=/usr/local/mysql –datadir=/usr/local/mysql/data
# /etc/init.d/mysql start
2.2 连接数据库,并创建所使用的库。本文为了测试创建名为testas的数据库
# /usr/local/mysql/bin/mysql -u root
mysql> create database testas;
Query OK, 1 row affected (0.03 sec)
2.3 创建从服务器同步主服务器时使用的账户。账户名为slavetest,密码为123;
Mysql>grant replication slave,reload,super on *.* To
slavetest@192.168.1.101 identified by ‘123’ ;
Mysql> flush privileges;
2.4 停止mysql数据库
# /etc/init.d/mysql stop
2.5 使用系统拷贝命令将主服务器的已经创建的数据,拷贝到备用服务器上。
# scp r /usr/local/mysql root@1192.168.1.101:/usr/local/mysql
注: 向备机传送备份数据库有两种方法。
a)备份数据直接将data目录需要备份数据库的文件夹传到备份数据中。
b)使用MySQLdump的方式来备份主数然后导入备库中(备份时加上”–master-data “参数)。
本文使用第一种方法来备,也建议使用第一种。如果是不能停机,则将主数据库进行锁库后在进行备份操作。
数据库锁定:
FLUSH TABLES WITH READ LOCK;
数据库打开:
UNLOCK TABLES;
2.6 修改主服务器的配置文件。在/etc/my.cnf文件[mysqld]后添加两个参数。第一个是
server-id=master_id,master_id的值为1到2^32-1之间的正整数,推荐使用1。第二个是
选择添加skip-name-resolve,如果开启远程访问,可以防止远程连接失败。
# vi /etc/my.cnf
修改后结果[mysqld]部分,部分截图如下:
2.7 启动数据库,记录同步数据的点。
# /etc/init.d/mysql start
# /usr/local/mysql/bin/mysql -u root
mysql> show master status;
获得数据如下图:
请记录file和Position的值,在配置从服务器中需要用到。
3. 开始配置从服务器
3.1 登录从服务器,修改从主服务器上所传文件的权限
# chown -R mysql:mysql /usr/local/mysql
3.2 修改配置从服务器的文件。在/etc/my.cnf文件[mysqld]后添加slave_id 的值是 1 到 2^32-1 之间的正整数,这个值一定不能与主服务器中master_id一样。推荐值为2。
# vi /etc/my.cnf
修改后结果[mysqld]部分,部分截图如下:
3.3 启动从数据库
# /etc/init.d/mysql start
3.4 编辑sql(使用组服务器上记录的数据),登录数据库后运行sql。
Sql 编写如下:
CHANGE MASTER TO
MASTER_HOST=’192.168.1.100′,
MASTER_USER=’slavetest’,
MASTER_PASSWORD=’123′,
MASTER_LOG_FILE=’mysql-bin.000004′,
MASTER_LOG_POS=106 ;
如下图:
3.5 启动从服务器同步服务
mysql> slave start;
4. 服务器配置完成,可以连到主服务器上,创建表、添加数据后,再看从数据库是否也有相同数据。如果数据相同,则配置成功。
注意:为了安全日常登录和操作最好不要使用root用户。不可以在从数据库中修改数据,最好将从数据库连接账号的权限修改为只读。
5. 登录主从数据库使用命令查看当前状态
5.1 登录从服务器,查看当前I/O情况
mysql> show slave statusG
Connecting to master
该线程证尝试连接到master上。
Checking master version
确定连接到master后出现的一个短暂的状态。
Registering slave on master
确定连接到master后出现的一个短暂的状态。
Requesting binlog dump
确定连接到master后出现的一个短暂的状态。该线程向master发送一个请求,告诉它要请求的二进制文件以及开始位置。
Waiting to reconnect after a failed binlog dump request
如果二进制日志转储(binary log dump)请求失败了(由于连接断开),该线程在休眠时进入这个状态,并定期重连。重连的时间间隔由
–master-connect-retry 选项来指定。
Reconnecting after a failed binlog dump request
该线程正尝试重连到master。
Waiting for master to send event
已经连接到master,正等待它发送二进制日志。如果master闲置时,这个状态可能会持续较长时间,如果它等待超过 slave_read_timeout 秒,就会发生超时。这时,它就会考虑
断开连接,然后尝试重连。
Queueing master event to the relay log
已经读取到一个事件,正把它拷贝到中继日志中以备SQL线程处理。
Waiting to reconnect after a failed master event read
读日志时发生错误(由于连接断开)。该线程在重连之前休眠 master-connect-retry 秒。
Reconnecting after a failed master event read
正尝试重连到master。当连接确定后,状态就变成 Waiting for master to send event。
Waiting for the slave SQL thread to free enough relay log space
relay_log_space_limit 的值非零,中继日志的大小总和超过这个值了。I/O线程等待SQL线程先处理中继日志然后删除它们以释放足够的空间。
Waiting for slave mutex on exit
当前线程停止了,这个时间很短。