在CentOS上配置MySQL主从复制(Master-Slave)
前面一篇介绍了免编译版的MySQL的安装,确实很方便,现在再来看看如何配置MySQL主从复制。数据库的安装请参考如何在CentOS6.5系统上安装免编译版的MySQL,我这里假设你已经分别在两台机器上安装好了MySQL数据库,都先不启动。
先在Master上操作
#编辑my.cmf文件,在[mysqld]以下添加两行内容
vi /etc/my.cnf
[mysqld]
innodb_flush_log_at_trx_commit=2
sync_binlog=1
#然后修改以下内容,一般是在mysql-bin后面加上IP最后三位数,个人习惯
log-bin=mysql-bin 改成 log-bin=mysql-bin-60
#server-id不变
server-id=1
关于innodb_flush_log_at_trx_commit
抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电 池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据。
关于sync_binlog
sync_binlog:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:
sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是 最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。
#启动主数据库服务
service mysqld start
#登录数据库
mysql -uroot -p密码
#授权给从数据库服务器192.168.1.61,用户名repl,密码123456,请根据自己实际情况修改,这里只做演示
mysql > GRANT REPLICATION SLAVE ON *.* to 'repl'@'192.168.1.61' identified by'123456';
mysql > show master status;
记录下File及Position的值,在后面进行从服务器配置的时候需要用到
现在切换到从(Slave)上操作
vi /etc/my.cnf
#在[mysqld]以下添加两行内容
[mysqld]
innodb_flush_log_at_trx_commit=2
sync_binlog=1
#然后修改以下内容,一般是在mysql-bin后面加上IP最后三位数,个人习惯
log-bin=mysql-bin 改成 log-bin=mysql-bin-61
#ID值必须唯一
server-id=1修改为 server-id=2
#启动从数据库服务
service mysqld start
#登录数据库
mysql -uroot -p密码
#执行以下语句
mysql> change master to
master_host='192.168.1.60',
master_user='repl',
master_password='123456',
master_log_file='File的内容',
master_log_pos=Position的内容;
#如果没有报错,就启动Slave同步进程
mysql> start slave;
#主从同步检查
mysql> show slave status\G
==============================================
Slave_IO_State:
Master_Host:192.168.1.60
Master_User: repl
Master_Port:3306
......
Slave_IO_Running: YES
Slave_SQL_Running: YES
以下内容省略......
==============================================
一定要确保其中Slave_IO_Running与Slave_SQL_Running的值为YES,主从配置才是成功的。
搞定,收工。
PS:这是在数据库刚装好的时候就配置的主从配置,没有任何数据,那么如果是已经有一台数据库服务器,要加一台从数据库服务器要怎么配置?这个还需研究。