Linux下搭建Mysql主从复制
首先需要安装两个以上的Mysql服务,一个作为master主节点服务,其余当作子节点。
主库配置
-
在主库修改my.cn
vi /etc/my.cnf #拷贝下边内容到配置文件 >>> #开启log-bin二进制日志 log-bin=mysql-bin #配置唯一的服务器ID,一般使用IP最后一位 server-id=101 #添加,允许从服务器更新二进制日志 log-slave-updates=true #需要同步的数据库,如果有多个,复制多份指定数据库名即可(修改为自己需要同步的数据库) binlog_do_db=testdb #不需要同步的数据库,如果有多个,复制多份指定数据库名即可 binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=sys #下面不是必须配置 #主要是为了使用带事务的InnoDB进行复制设置时尽可能提高持久性和一致性 innodb_flush_log_at_trx_commit = 1 #使binlog在每1次binlog写入后与硬盘同步 sync_binlog = 1 #只保留7天的二进制日志,以防磁盘被日志占满 expire-logs-days=7
-
重启数据库
# 重启数据库 systemctl restart mysqld.service # 查看运行状态 systemctl status mysqld
-
检验设置是否成功
# 登录mysql mysql -u用户名 -p密码
登录成功后输入下面命令检查:
show variables like 'server_id';
再输入命令:
show variables like 'log_bin';
再输入命令:
show variables like '%skip_networking%';
检查完毕,设置成功。
-
建立主从复制的账号
先登录MySQL之后,执行下面命令:
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';
上面SQL的作用是创建一个用户【slave】密码为【123456】并且给【slave】用户授予REPLICATION SLAVE权限,常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
#查看master的状态
show master status\G
上面结果中的File和Position的值需要记录一下,待会要用到。
从库配置
-
测试连接主从复制用户
mysql -uslave -p'root@123456' -h192.168.110.101
-
配置从库my.cnf
vi /etc/my.cnf #然后在【mysqld】节点下面新增下面内容: #配置唯一的服务器ID,一般使用IP最后一位 server-id=100
然后重启数据库,并查看刚配置的是否生效:
systemctl restart mysqld mysql -uroot -pAaBb123456 show variables like 'server_id'; show variables like 'log_bin';
-
配置复制参数
登录MySQL后运行下面语句,注意 MASTER_LOG_FILE 和 MASTER_LOG_POS 的值要与Master的一致。
CHANGE MASTER TO MASTER_HOST='192.168.110.101',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000537',MASTER_LOG_POS=1444;
如果执行失败,就执行:reset slave; 我这里执行成功了,就可以直接执行下面语句了:
start slave;
-
查看从库状态
执行以下命令查看从库状态:
show slave status\G
** 注意红框内的属性**
Slave_IO_Running: Yes # 负责与主机的io通信
Slave_SQL_Running: Yes # 负责自己的slave mysql进程
若出错,则清理掉之前的配置,执行以下命令:
stop slave; reset slave all;
-
测试
使用连接工具连接上主库和从库后,在主库上面新建一个【testdb】数据库,然后从库直接刷新,就可以看到这个数据库了,同样的,你在主库上新建什么表,添加什么数据,刷新从库后,会发现,数据都在了,说明测试成功了,现在主从复制功能就实现了。