1、配置主服务器的数据库配置文件my.cnf
连接主数据库服务器,打开my.cnf
vim /etc/my.cnf
添加配置
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
server-id = 1
log-bin=mysql-bin
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
max_binlog_size = 500M
binlog-do-db = test
binlog-ignore-db = mysql
log-slave-updates
expire_logs_days = 1
binlog_format = 'MIXED'
2、配置从服务器的数据库配置文件my.cnf
连接从数据库服务器,打开my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
server-id = 2
replicate-do-db = test
3、重启服务器上的主从数据库
/usr/local/mysql/support-files/mysql.server restart
4、主数据库授权同步账户
进入主库
#授权从服务器用户
grant replication slave on *.* to 'root'@'从库ip' identified by '123456';
#刷新权限
flush privileges;
#查看主库状态
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000007 | 18291 | yxw | mysql | |
+------------------+----------+--------------+------------------+-------------------+
5、配置从服务器数据库
CHANGE MASTER TO MASTER_HOST='主库ip',MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=18291;
6、开启从库同步
#开启从库
start slave;
#查看从库状态
show slave status
7.撤销已经赋予给MySQL同步账户的权限
进入主库
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:
GRANT REPLICATION SLAVE ON *.* TO 'root'@'从库ip' IDENTIFIED BY '123456';
REVOKE REPLICATION SLAVE ON *.* FROM 'root'@'从库ip';
参考:http://blog.csdn.net/qq_34754363/article/details/72853698
配置详解:
server-id :
服务器标志号,注意在配置文件中不能出现多个这样的标识,如果出现多个的话mysql以第一个为准,一组主从中此标识号不能重复。一般以ip地址最后一位
log-bin:
开启bin-log,并指定文件目录和文件名前缀。
innodb_flush_log_at_trx_commit = N:
如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去.
如果innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
注意:
由于进程调度策略问题,这个“每秒执行一次 flush(刷到磁盘)操作”并不是保证100%的“每秒”。
sync_binlog = N:
N>0 每向二进制日志文件写入N条SQL或N个事务后,则把二进制日志文件的数据刷新到磁盘上;
N=0 不主动刷新二进制日志文件的数据到磁盘上,而是由操作系统决定;
当innodb_flush_log_at_trx_commit和sync_binlog 都为1时是最安全的,在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。但是鱼与熊掌不可兼得,都为1会导致频繁的IO操作,因此该模式也是最慢的一种方式
max_binlog_size :
每个bin-log最大大小,当此大小等于500M时会自动生成一个新的日志文件。一条记录不会写在2个日志文件中,所以有时日志文件会超过此大小。
binlog-do-db:
需要同步的数据库名字,如果是多个,就以此格式在写一行即可。
binlog-ignore-db:
不需要同步的数据库名字,如果是多个,就以此格式在写一行即可
log-slave-updates:
当Slave从Master数据库读取日志时更新新写入日志中,如果只启动log-bin 而没有启动log-slave-updates则Slave只记录针对自己数据库操作的更新。
expire_logs_days =1:
设置bin-log日志文件保存的天数,此参数mysql5.0以下版本不支持
binlog_format = “MIXED”:
设置bin-log日志文件格式为:MIXED,可以防止主键重复。
replicate-do-db:
参数是在从数据库配置文件中配置,指定从数据库要复制主数据库的哪个库