先在Master上操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#编辑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 </pre> <p><strong>关于innodb_flush_log_at_trx_commit</strong><br /> 抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入( flush )硬盘,这是很费时的。特别是使用电 池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒 flush 到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据。 </p> <p><strong>关于sync_binlog</strong><br /> sync_binlog:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:<br /> sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。<br /> sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。</p> <p>在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是 最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。</p> |
关于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倍甚至更多。
1
2
3
4
5
6
7
8
9
10
11
|
#启动主数据库服务 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)上操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
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:这是在数据库刚装好的时候就配置的主从配置,没有任何数据,那么如果是已经有一台数据库服务器,要加一台从数据库服务器要怎么配置?这个就让我研究研究,待续... |