分类:
2010-07-11 22:52:01
应用需求:
公司有多个项目使用了mysql数据库,在测试环境时出现过数据库故障,导致数据丢失的情况了,为了解决该问题对所有mysql服务都必须配置成主从同步模式,实现多台mysql之间的热备功能,防止出现DB的单点故障,提供冗余功能。
安装环境:
CentOS 5.4
mysql-5.1.30
主数据库:
mysqla ---master角色 IP:172.16.16.200
mysqlb ---slave角色 IP:172.16.16.201
mysqla为主节点,mysqlb为从节点,测试同步的数据库名[usercenter]
配置过程:
一、主节点配置:
1、MYSQL安装:
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 -p(youpassword)
##添加[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.000007与3455这两个数值记下来,在配置从节点时需要使用。
一、从节点配置:
1、MYSQL安装:
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 -p(youpassword)
##从节点添加[usercenter]数据库,要保证主从节点数据一致性
mysql>create database usercenter;
备份主节点[usercenter]数据库,并在从节点上还原。
mysql>flush privileges;
##添加主节点操作,写入正确的主节点IP、PORT、USER、PASSWD、及在主节点使用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_Running与Slave_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;