mysql从 3.22版后,推出了master和slave服务器的设置,使得主从服务器可以实时同步。而不必再写脚本,通过备份数据库文件的方式。
下面是一个例子,配置一个mysql replication环境,要求(10.0.0.1)为master
(10.0.0.2)为slave,且只同步master服务器上的其中一个数据库
登陆master服务器
/usr/local/mysql/mysql -A
mysql>create database test; ---生成一个测试数据库test
mysql>GRANT FILE ON *.* TO slaver@10.0.0.2 IDENTIFIED BY ‘slaver’;---把文件权限给了10.0.0.2上的slaver用户,密码是slaver。
mysql>GRANT REPLICATION SLAVE ON *.* TO slaver@10.0.0.2 IDENTIFIED BY ‘slaver’;
mysql>quit
cd /usr/local/mysql/var
tar cvzf test.tar.gz test ---把测试数据库打包
scp test.tar.gz 10.0.0.2:/tmp/ ---把测试数据库打包文件传给slave,使用的是ssh隧道
vi /etc/my.cnf,add these lines: ---编辑master的/etc/my.cnf文件,添加以下行,在[mysqld]段
log-bin ---二进制log形式,如果不用这种形式,无法实现replication
server-id = 1 ---指定master的id为1,,master的一定要比slave的小才行
sql-bin-update-same
binlog-do-db = test ----指定要同步的是test数据库,而不是整个数据库,如果不写这一行,就是全部数据库。
/usr/local/etc/rc.d/mysql.server.sh stop
/usr/local/etc/rc.d/mysql.server.sh start
登陆slaver服务器
cd /usr
tar xvzf mysql-4.0.15.tar.gz
cd mysql-4.0.15
./configure --prefix=/usr/local/mysql
make
make install
scripts/mysql_install_db
cp support-files/my-medium.cnf /etc/my.cnf
--------------------以上为安装slave数据库
vi /etc/my.cnf,add these lines: ------同样编辑/etc/my.cnf文件,在[mysqld]段
log-bin
master-host= 10.0.0.1 ----指定master是谁
master-user= slaver -----指定同步时的用户名
master-password= slaver ----指定同步的密码
master-port= 3306
server-id= 40 ----slave的id
master-connect-retry= 60
replicate-do-db= test -----要复制的数据库
log-slave-updates
cp /tmp/test.tar.gz /usr/local/mysql/var/
tar xvzf test.tar.gz
----------------以上是把test数据库安装在slave,使得有一个原始数据
cp support-files/mysql.server /usr/local/etc/rc.d/mysql.server.sh
/usr/local/etc/rc.d/mysql.server.sh start