共计 2989 个字符,预计需要花费 8 分钟才能阅读完成。
前面一篇介绍了免编译版的 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:这是在数据库刚装好的时候就配置的主从配置,没有任何数据,那么如果是已经有一台数据库服务器,要加一台从数据库服务器要怎么配置?这个还需研究。
Linux 环境下 MySQL5.6 Master-Slave 配置实战 http://www.linuxidc.com/Linux/2016-04/130332.htm
Linux 下 MySQL 主从复制(Master-Slave)与读写分离(Amoeba)实践 http://www.linuxidc.com/Linux/2016-05/130905.htm
生产环境 MySQL 主主同步主键冲突处理 http://www.linuxidc.com/Linux/2013-07/86890.htm
MySQL 主从失败 错误 Got fatal error 1236 http://www.linuxidc.com/Linux/2012-02/54729.htm
MySQL 主从复制,单台服务器上实施 http://www.linuxidc.com/Linux/2013-03/81913.htm
搭建 MySQL 代理服务器实现读写分离 + 主从同步 http://www.linuxidc.com/Linux/2014-05/102265.htm
MySQL 5.5 主从双向同步 http://www.linuxidc.com/Linux/2012-12/75973.htm
MySQL 5.5 主从同步排错 http://www.linuxidc.com/Linux/2014-08/105416.htm
MySQL 主从复制异步半同步实例 http://www.linuxidc.com/Linux/2014-10/107608.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132266.htm