mysql主从配置
准备工作
1.主从数据库版本最好一致
2.主从数据库内数据保持一致
3.主数据库:47.98.247.255 /linux
4.从数据库:47.115.38.172 /linux
一.主服务器设置
1.修改主服务器mysql配置
找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/my.cnf,在[mysqld]部分插入如下两行:vi /etc/my.cnf
[mysqld]
#服务器标志号,注意在配置文件中不能出现多个这样的标识,如果出现多个的话mysql以第一个为准,一组主从中此标识号不能重复。
server-id = 1
log-bin=/home/mysql/logs/binlog/bin-log #开启bin-log,并指定文件目录和文件名前缀。
#每个bin-log最大大小,当此大小等于500M时会自动生成一个新的日志文件。一条记录不会写在2个日志文件中,所以有时日志文件会超过此大小。
max_binlog_size = 500M
binlog_cache_size = 128K #日志缓存大小
binlog-do-db = adb #需要同步的数据库名字,如果是多个,就以此格式在写一行即可。
binlog-ignore-db = mysql #不需要同步的数据库名字,如果是多个,就以此格式在写一行即可。
#当Slave从Master数据库读取日志时更新新写入日志中,如果只启动log-bin 而没有启动log-slave-updates则Slave只记录针对自己数据库操作的更新。
log-slave-updates
expire_logs_day=2 #设置bin-log日志文件保存的天数,此参数mysql5.0以下版本不支持。
binlog_format="MIXED" #设置bin-log日志文件格式为:MIXED,可以防止主键重复。
2.重启mysql,创建用于同步的用户账号
- 输入service mysqld restart重启mysql
- 输入mysql -uroot -p 登录mysql
- 创建用户并授权:CREATE USER ‘hj’@‘47.115.38.172’ IDENTIFIED BY ‘hj@123456’;
- 分配权限GRANT REPLICATION SLAVE ON . TO ‘hj’@‘47.115.38.172’;
- flush privileges; #刷新权限
3.查看master状态,记录二进制文件名(mysql-bin.000001)和位置(759)
SHOW MASTER STATUS;
二.从服务器slave修改
1.修改mysql配置
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=2 #设置server-id
2.重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置)
CHANGE MASTER TO
MASTER_HOST='47.98.247.255',
MASTER_USER='hj',
MASTER_PASSWORD='hj@123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=759;
3.启动slave同步进程
start slave;
4.查看slave状态
show slave status\G;
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。接下来就可以进行一些验证了,比如在主master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可以完成主从复制功能的验证了。
还可以用到的其他相关参数:
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game
停止主从同步
stop slave;
连接断开时,重新连接超时时间
change master to master_connect_retry=50;