服务器环境:
rhel6.5 192.168.2.106 master
rhel6.5 192.168.2.108 slaver1
rhel6.5 192.168.2.107 slaver2
注: mysql 数据库的版本,两个数据库版本要相同,或者 slave 比 master 版本高!
在 master slave 上安装 mysql 软件,mysql 软件可以在 http://www.mysql.com 上下载,源码或是 rpm 包都可以,
由于 RHEL6 自带 mysql 软件包,直接 yum 安装。
# yum install mysql mysql-server -y
一。master server 配置
1)配置 /etc/my.cnf 配置文件
在[mysqld]下添加一下参数
log-bin=mysql-bin #启动二进制日志系统
binlog-do-db=test1 #二进制需要同步的数据库名,如果需要同步多个库,例如要再同步 test 库,再添加一行
“binlog-do-db=test2”,以此类推
server-id=1
#必须为 1 到 232–1 之间的一个正整数值
binlog-ignore-db=mysql #禁止同步 mysql 数据库
2 ) 启动 master
# service mysqld start
3)创建同步帐户,并给予权限
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO centrald@'192.168.2.108' IDENTIFIED BY 'centrald';
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
调试:
(4)在108slaver机子上进行远程数据库登录
mysql -h 192.168.2.106 -ucentrald -pcentrald
登录成功,说明授予106slaver机的权限正确
(5)在 master 上用下面的命令查看
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 713 | test1 | |
+------------------+----------+--------------+------------------+
记录 File 和 Position 的值,下面会用到。
二。slave1server 配置
1 )配置 /etc/ my.cnf 文件
在[mysqld]下添加一下参数
server-id=2
# 从服务器 ID 号,不要和主 ID 相同,如果设置多个从服务器,每个从服务器必须有一个唯一的 server-id 值,必
须与主服务器的以及其它从服务器的不相同。可以认为 server-id 值类似于 IP 地址:这些 ID 值能唯一识别复制
服务器群集中的每个服务器实例。
log-bin=mysql-bin
binlog-do-db=test1 #允许的库
binlog-ignore-db=mysql
2 ) 启动 slave
# service mysqld start
3)登录mysql,创建test1数据库
因为在master里设置的是同步test1的数据,所以在slaver中要创建test1数据库
create database test1;
4)
change master to master_host='192.168.2.106', master_user='centrald', master_password='centrald',master_log_file='mysql-bin.000005',master_log_pos=713;
Query OK, 0 rows affected (0.07 sec)
注意:此处的log_file,log_pos必须是master当前最新的数据
(5)启动slave
slave start;
(如果同步错误,可以使用slave stop先停止,然后再重新同步)
(6) show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.106
Master_User: centrald
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 713
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes 如果这两行都是 yes,表示从库的 I/O,Slave_SQL 线程都正确开启.表明数据库正在同步
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:
Skip_Counter: 0
Exec_Master_Log_Pos: 713
Relay_Log_Space: 407
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
(7)最后可以在master中的test1库创建表,检验slave机是否同步。
三。slaver2server配置
由于 master 上已经有数据,而新加的 slave2 没有,必须在配置复制前同步数据。
在slave1上进行操作(或者master)
(1) mysqldump -pdesktop108 test1 > test1.bak
(2)scp test1.bak [email protected]:
(3)vim /etc/my.cnf 修改为如下
server-id=2
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog-do-db=test1
log-slave-updates
(4)/etc/init.d/mysqld restart
(5)给slave2主机分配同步slave1的权限
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO centrald@'192.168.2.107'IDENTIFIED BY 'centrald';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
(6)查看当前日志文件大小
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 595 | test1 | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
(1)vim /etc/my.cnf
server-id=3
log-bin=mysql-bin
binlog-do-db=test1 #允许的库
binlog-ignore-db=mysql
(2)/etc/init.d/mysqld start 启动数据库
(3)初始化root密码
mysqladmin -uroot -p password desktop107
(4)先建立数据库test1,然后将slave1中的数据导入
mysql -pdesktop107 test1 <test1.bak
(5)
mysql> change master to master_host='192.168.2.108', master_user='centrald',master_password='centrald', master_log_file='mysql-bin.000001', master_log_pos=595;
Query OK, 0 rows affected (0.08 sec)
(6)mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
(7)mysql> show slave status\G;
(8)测试方法与前一种相同,在master上建立新的数据,看有没有同步。
/var/lib/mysql/下相关文件作用:
1. mysql-bin.index:服务器一旦开启二进制日志,会产生一个与二日志文件同名,但是以.index 结尾的文件。
它用于跟踪磁盘上存在哪些二进制日志文件。MySQL 用它来定位二进制日志文件。
2. mysqld-relay-bin.index:该文件的功能与 mysql-bin.index 类似,但是它是针对中继日志,而不是二进制日志。
3. master.info:保存 master 的相关信息。不要删除它,否则,slave 重启后不能连接 master。
4. relay-log.info:包含 slave 中当前二进制日志和中继日志的信息。
mysql常用命令:
(1)查看mysql二进制文件
mysqlbinlog mysql-bin.000004
(2)mysql_secure_installation 启动mysql安全配置向导