一、测试环境:
主库(Master):Centos 5.5 64位操作系统
Mysql Server version: 5.1.59
IP:192.168.1.188
从库(Slave):Centos 5.5 64位操作系统
Mysql Server version: 5.1.59
IP:192.168.1.189
权限管理:GRANT privileges ON db TO user@host IDENTIFIED BY "password" WITH GRANT OPTION
Privileges==alter 、select、create、 delect、 drop 、index、 insert 、replication slave 等
常见问题:Slave_IO_Running: No
1.先检查防火墙设置(测试前最好关闭)
2.所有操作完后,注意要重启mysql服务
二、主库的操作
#vi /etc/my.cnf
server-id = 1
my.cnf内容比较多,这里只介绍一些重要参数
server-id = 1 这是数据库ID,此ID唯一,主库用默认的1即可,从库调整为2,多个从库的ID依次类推,切不可有相同ID出现,这样会造成同步出错。
log-bin=mysql-bin 二进制日志文件,此项必须启用,从库需要通过它进行数据同步。
配置主库其实就检查这2个选项,如果你同步的数据库不是全部的,只是同步个别库,或个别的不需要同步,需要继续往下看
binlog-do-db=test 需要同步的数据库,如果同步多个库,需要另行重写,如
binlog-do-db=test1
binlog-do-db=test2
(数据库安装包不同这个选项有的配置文件里没有,需要加上)
binlog-ignore-db=mysql 不需要同步的数据库,与binlog-do-db正好相反,如果你有100个库,只想同步其中几个,那么你应该使用binlog-do-db,如果不想同步其中的几个,就使用binlog-ignore-db
(数据库安装包不同这个选项有的配置文件里没有,需要加上)
建立同步用的数据库账户
主库必须提供一个账户让从库通过此账户进行连接并进行同步,进入mysql后输入下面命令
mysql> grant replication slave on *.* to syncuser@192.168.1.189 identified by '123456';
锁住主库表,停止数据更新
Mysql> flush tables with read lock;
打开另一个shell窗口
Shell> cd /var/lib/
Shell> tar -zcvf mysqlbak.tar.gz mysql
(另外一种打包数据库的方法: Shell> mysqldump --opt --default-character-set=utf8 --master-data --databases castlot warlog assist > castlot120116.sql
Shell>vim castlot120116.sql 查看File和Position并记录)
Mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000073 | 98 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Mysql> unlock tables;
将mysqlbak.tar.gz拷贝到丛库数据库目录下并解压
Shell>scp mysqlbak.tar.gz root@192.168.1.189:/usr/local/
三、从库的操作
Shell>cd /usr/local
Shell>tar -zxvf mysqlbak.tar.gz
(另一种对应方法:Shell>mysql -S /tmp/mysql.sock --default-character-set=utf8 < castlot120116.sql)
将丛库my.cnf中server-id=1修改为server-id=2
增加要同步的数据库:
replicate-wild-do-table=assist.%
replicate-wild-do-table=castlot.%
replicate-wild-do-table=warlog.%
重启下mysql
之前先stop slave
设置连接MASTER MASTER_LOG_FILE为主库的File:mysql-bin.000073,MASTER_LOG_POS为主库的Position:98
mysql> change master to
master_host='192.168.1.188',
master_user='syncuser',
master_password='123456',
master_log_file='mysql-bin.000073',
master_log_pos=98;
Mysql> start slave;
检查从库是否正常同步
mysql>show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.188
Master_User: syncuser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000073
Read_Master_Log_Pos: 98
Relay_Log_File: TMac-relay-bin.000073
Relay_Log_Pos: 12753
Relay_Master_Log_File: mysql-bin.000073
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error: