mysql master-slave (Replication)配置笔记
感触最深的是:细节决定成败,尤其在Linux下配置服务。
Master:
系统 fedora8
数据库
-————-
| version() |
-————-
| 5.0.45-log |
-————-
Ip:172.20.92.108
Slave:
系统 CentOs 5
数据库
-————-
| version() |
-————-
| 5.0.45-log |
-————-
Ip:172.20.92.110
测试数据库:test
网上说:从机(Slave)的数据库版本不能低于主机(Master)的版本。
主机Master配置文件/etc/my.cnf
[root@gkx bin]# more /etc/my.cnf
[mysqld]
server_id=1 ##主机id 不能和从机id重复
log-bin=/var/log/mysql/mysql-bin.index ##主机日志文件
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
set-variable=replicate-do-db=tencent
##主从复制配置时,该选项表明只复制tencent数据库,由于当前是主机,所以该选项没有意义
user=mysql
Default to using old password format for compatibility with mysql 3.x
clients (those using the mysqlclient10 compatibility package).
old_passwords=1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
从机Slave配置文件:/etc/my.cnf
[root@wsc mysqld]# more /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
log_slow_queries=/var/log/mysql/slow.log
long_query_time = 1
log_long_format
log-queries-not-using-indexes
Default to using old password format for compatibility with mysql 3.x
clients (those using the mysqlclient10 compatibility package).
old_passwords=1
server-id = 2 ##从机id,区别于主机id
master-host = 172.20.92.108 ##主机ip,供从机连接主机用
master-user=slave ##刚才为从机复制主机数据新建的账号
master-password=slave ##密码
master-port=3306
log-slave-updates
log-bin =/var/log/mysql/mysql-bin.index
##从机日志文件,区别于中继日志(Slave自行调用,更新主机数据时查询的日志)
log=/var/log/mysql/log.log
back_log = 50
max_connections = 100
max_connect_errors = 10
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
一定要仔细查看从机配置文件中以下所列参数:
#启用从库日志,这样可以进行链式复制
log-slave-updates
从库是否只读,0表示可读写,1表示只读
read-only=1
#只复制某个表
replicate-do-table=tablename
##我的这次配置就是无意中限制了只能复制某一数据库导致失败的
#只复制某些表(可用匹配符)
replicate-wild-do-table=tablename%
只复制某个库
replicate-do-db=dbname
#只复制某些库
replicte-wild-do-db=dbname%
不复制某个表
replicate-ignore-table=tablename
#不复制某些表
replicate-wild-ignore-table=tablename%
不复制某个库
replicate-ignore-db=dbname
下面是具体配置过程:
Master:
1. 为从机(Slave)创建一个复制权限账户
mysql > GRANT REPLICATION SLAVE ON . TO ’slave’@’172.20.92.110’ IDENTIFIED BY ‘slave’;
Ps:replication slave 为单一的复制权限 用户名slave 密码slave
2.锁定主机数据库 导出当前锁定状态下所有数据到从机中 做好复制前的基本数据同步工作
mysql > FLUSH TABLES WITH READ LOCK;
mysql > exit
[root@%%] # mysqldump uroot -p test > test.sql
3.查询当前主机数据库文件和位置
mysql > show master status;
-————————-———-———————-———————-
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
-———————-—————-—————-—————————+
| mysql-bin.000041 | 1509 | | |
-———————-—————-—————-—————————+
Ps:记录下这两个值(文件名、当前位置),一会儿配置从机连接主机时要用到。
Slave:
1.创建数据库 test ,将主机Master生成的sql文件导入到test数据库中。
2.关掉Slave,将主机日志文件和位置信息读入从机
mysql > stop slave;
mysql > change master to
→master_log_file=‘mysql-bin.000041’,
→master_log_pos=1509;
mysql > start slave;
mysql > show slave status \G
mysql> show slave status\G;
1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.20.92.108 ##主机ip
Master_User: slave ##复制账号
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000041 ##主机日志文件
Read_Master_Log_Pos: 1509 ##主机日志文件位置
Relay_Log_File: mysqld-relay-bin.000007 ##从机中继日志文件
Relay_Log_Pos: 235 ##中继日志文件位置
Relay_Master_Log_File: mysql-bin.000041
Slave_IO_Running: Yes ##从机IO线程 连接主机
Slave_SQL_Running: Yes ##从机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: 1509
Relay_Log_Space: 235
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
1 row in set (0.00 sec)
接下来,解锁Master,允许主机数据库更新。
Master:
mysql > unlock tables;
最后,测试一下:在主机Master数据库中insert、delete、update若干记录,从机会将操作同步下来的。