Chinaunix首页 | 论坛 | 博客
  • 博客访问: 282224
  • 博文数量: 44
  • 博客积分: 2046
  • 博客等级: 大尉
  • 技术积分: 611
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-06 11:11
文章分类

全部博文(44)

文章存档

2011年(1)

2010年(43)

我的朋友

分类:

2010-07-11 22:52:01

应用需求:

公司有多个项目使用了mysql数据库,在测试环境时出现过数据库故障,导致数据丢失的情况了,为了解决该问题对所有mysql服务都必须配置成主从同步模式,实现多台mysql之间的热备功能,防止出现DB的单点故障,提供冗余功能

 

安装环境:

CentOS 5.4

mysql-5.1.30

主数据库:

mysqla ---master角色    IP172.16.16.200

mysqlb ---slave角色    IP172.16.16.201

mysqla为主节点,mysqlb为从节点,测试同步的数据库名[usercenter]

配置过程:

一、主节点配置:

1MYSQL安装:

groupadd mysql

mkdir /data/mysql

chown -R mysql:mysql /data/mysql

useradd mysql -d /dev/null -g mysql -s /sbin/nologin

tar zxvf mysql-5.1.30.tar.gz

cd mysql-5.1.30

./configure --with-mysqld-user=mysql --prefix=/usr/local/mysql5 --localstatedir=/data/mysql --with-charset=gbk --with-extra-charset=all --without-isam --exec-prefix=/usr/local/mysql5

make

make install

/usr/local/mysql5/bin/mysql_install_db --user=mysql

cp support-files/my-large.cnf /etc/my.cnf

cp support-files/mysql.server /etc/rc.d/init.d/mysqld 

chmod 700 /etc/rc.d/init.d/mysqld

/usr/local/mysql5/bin/mysqld_safe --user=mysql &

/etc/rc.d/init.d/mysqld start

chkconfig --add mysqld 

chkconfig --level 2345 mysqld on

ln -s /usr/local/mysql5/bin/mysql /sbin/mysql 

ln -s /usr/local/mysql5/bin/mysqladmin /sbin/mysqladmin

*注:mysql安装好之后root用户默认是空密码,因此首次登录一定记住要修改密码。

2、主节点配置内容:

、编辑MYSQL配置文件

vi /etc/my.cnf

需要修改或者注意的地方

server-id=1

log-bin=mysql-bin

replicate-do-db=[DBname] //****定义从节点需要从主节点同步的数据库

、登录数据库,为从节点添加同步授权

##登录mysql

mysql -u root -pyoupassword

##添加[usercenter]数据库

mysql>create database usercenter;

##授权操作,允许172.16.16.201使用slave用户到本机进行数据库同步(如果有多个从节点,就需要针对每个从节点添加授权)

mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'172.16.16.201' identified by 'yourpassword';

mysql>show master status\G;

+----------------------+-------------+---------------------+------------------------+

| File            | Position  | Binlog_Do_DB  | Binlog_Ignore_DB |

+----------------------+-------------+---------------------+------------------------+

| mysql-bin.000007 |     3455 |               |                | 

+----------------------+-------------+---------------------+------------------------+

mysql-bin.0000073455这两个数值记下来,在配置从节点时需要使用。

一、从节点配置:

1MYSQL安装:

groupadd mysql

mkdir /data/mysql

chown -R mysql:mysql /data/mysql

useradd mysql -d /dev/null -g mysql -s /sbin/nologin

tar zxvf mysql-5.1.30.tar.gz

cd mysql-5.1.30

./configure --with-mysqld-user=mysql --prefix=/usr/local/mysql5 --localstatedir=/data/mysql --with-charset=gbk --with-extra-charset=all --without-isam --exec-prefix=/usr/local/mysql5

make

make install

/usr/local/mysql5/bin/mysql_install_db --user=mysql

cp support-files/my-large.cnf /etc/my.cnf

cp support-files/mysql.server /etc/rc.d/init.d/mysqld 

chmod 700 /etc/rc.d/init.d/mysqld

/usr/local/mysql5/bin/mysqld_safe --user=mysql &

/etc/rc.d/init.d/mysqld start

chkconfig --add mysqld 

chkconfig --level 2345 mysqld on

ln -s /usr/local/mysql5/bin/mysql /sbin/mysql 

ln -s /usr/local/mysql5/bin/mysqladmin /sbin/mysqladmin

*注:mysql安装好之后root用户默认是空密码,因此首次登录一定记住要修改密码。

2、从节点配置内容:

、编辑MYSQL配置文件

vi /etc/my.cnf

需要修改或者注意的地方

server-id=2

#log-bin=mysql-bin //****关闭该功能

、登录数据库,为从节点添加同步授权

##登录mysql

mysql -u root -pyoupassword

##从节点添加[usercenter]数据库,要保证主从节点数据一致性

mysql>create database usercenter;

备份主节点[usercenter]数据库,并在从节点上还原。

mysql>flush privileges;

##添加主节点操作,写入正确的主节点IPPORTUSERPASSWD、及在主节点使用show master status;查询出来的文件名及偏移值;

mysql>CHANGE MASTER TO MASTER_HOST = '172.16.16.201',MASTER_PORT = 3306,MSTER_USER = 'slave',MASTER_PASSWORD = 'yourpassword',MASTER_LOG_FILE = 'mysql-bin.000007',MASTER_LOG_POS = 3455;

mysql>slave start;

mysql>show slave status\G;

Master_Host: 172.16.16.200

Master_User: mysqlb

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000007

Read_Master_Log_Pos: 3455

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

检查输出结果是否与配置相符,并且Slave_IO_RunningSlave_SQL_Running两项必须为YES

三、测试同步是否正常:

在主节点数据库(mysqla)添加一条记录,再查看从节点(mysqlb)是否有正常同步到新添记录。

主节点(mysqla):创建一张新表test,并插入几行数据

创建新表:

CREATE TABLE `user` (

  `ID` int(8) NOT NULL AUTO_INCREMENT,

  `USER` varchar(32) NOT NULL,

  `AGE` int(3) DEFAULT NULL,

  `ADDRESS` varchar(128) DEFAULT NULL,

  `MAIL` varchar(255) DEFAULT NULL,

  `ENDTIME` datetime DEFAULT NULL,

  PRIMARY KEY (`ID`)

) ;

插入记录:

INSERT INTO user

   ( `USER`, `AGE`, `ADDRESS`, `MAIL`, `ENDTIME`)

VALUES

   ( 'test01', 30, 'china', 'sun.samson@live.cn', now());

INSERT INTO user

   ( `USER`, `AGE`, `ADDRESS`, `MAIL`, `ENDTIME`)

VALUES

   ( 'test02', 33, 'china', '111@aa.com', now());

INSERT INTO user

   ( `USER`, `AGE`, `ADDRESS`, `MAIL`, `ENDTIME`)

VALUES

   ('test03', 36, 'china', '111@aa.com', now());

从节点(mysqlb):查询库内数据是否有正常同步

select * from user;

阅读(1028) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~