mysql的主从同步也是数据库中比较常见的问题。自己也动手做了下主从同步,现记录一下。
环境说明:
主节点:10.0.0.61
从节点:10.0.0.71
mysql版本:5.7.24
linux:ubuntu16.04
一.安装mysql
1.主节点上执行以下命令
1. sudo apt-get install mysql-server
2. apt-get install mysql-client
3. sudo apt-get install libmysqlclient-dev
安装完后使用如下命令查看是否安装成功
sudo netstat -tap | grep mysql
看到如下信息:
carter@bogon:~$ sudo netstat -tap | grep mysql
tcp6 0 0 [::]:mysql [::]:* LISTEN 778/mysqld
tcp6 0 0 bogon:mysql bogon:52514 ESTABLISHED 778/mysqld
说明安装成功。
2.在从节点上执行相同的操作安装mysql。
二.mysql主从同步设置
MySQL的复制原理以及流程
基本原理流程,3个线程以及之间的关联:
主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;
从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;
从:sql执行线程——执行relay log中的语句;
主从复制配置过程:
主节点:
启用二进制日志。
为当前节点设置一个全局唯一的server_id。
创建有复制权限的用户账号 REPLIACTION SLAVE ,REPLIATION CLIENT。
从节点:
启动中继日志。
为当前节点设置一个全局唯一的server_id。
使用有复制权限的用户账号连接至主节点,并启动复制线程。
1.编辑主节点的配置文件
sudo vi /etc/mysql/my.cnf
添加如下配置
[mysqld]
log-bin = mysql-bin
server-id =1
innodb-file-per-table =ON
skip_name_resolve=ON
注意:[mysqld]这个不能漏掉,否则重启mysql服务会报错。
2.重启服务器,并连接mysql
mysql -u root -p123456
3.查看主节点日志文件是否开启
1)二进制日志是否开启
mysql> show global variables like '%log%';
看是否如下
2)查看二进制列表
mysql> show master logs;
3)查看主节点server_id
mysql> show global variables like '%server%';
4.主节点创建有复制权限用户repluser/replpass
grant replication slave on *.* to 'repluser'@'10.0.0.71' identified by 'replpass';
grant replication CLIENT on *.* to 'repluser'@'10.0.0.71' identified by 'replpass';
5.刷新权限
flush privileges
主节点的配置就完成了。
下面是从节点的配置
6.编辑从节点的配置文件
sudo vi /etc/mysql/my.cnf
添加如下配置:
[mysqld]
relay-log=relay-log
relay-log-index=relay-log.index
server-id=2
innodb_file_per_table=ON
skip_name_resolve=ON
[mysqld]不能漏掉
7.重启从节点,连接mysql
mysql -uroot -p123456
8.查看从节点配置是否生效
1)中继日志是否开启
show global variables like '%log%';
2)查看server信息
show global variables like '%server%';
9.在从节点配置访问主节点的参数信息
添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息。
注意:主节点的二进制文件一定要是二进制列表中的最后一个二进制文件。
先切换到主节点,查看主节点上的日志文件
可以看到主节点上的最新日志文件为mysql-bin.000002,大小306
然后在从节点上执行
CHANGE MASTER TO MASTER_HOST='10.0.0.61',MASTER_USER='repluser',MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=306;
MASTER_HOST设置主节点IP,MASTER_USER为复制权限用户,MASTER_PASSWORD复制权限用户密码
MASTER_LOG_FILE为主节点最新日志文件,MASTER_LOG_POS为日志文件File_size
注意:上面截图为第一次操作截图,实际执行命令为第二次操作。
10.查看从节点状态信息
查看从节点的复制线程,IO线程 和 SQL 线程。
show slave status \G;
可以看到IO线程 和 SQL 线程状态都为NO,即关闭状态。
11.启动复制线程
start slave;
12.再次查看检查从节点的复制线程是否开启。
show slave status \G;
可以看到IO线程和SQL线程都已经开启。
主从同步配置到此就完成了,下面来测试下是否真正生效。
三.测试主从同步设置
1.在主节点上创建数据库,并查看二进制日志信息。
create database test;
show master status;
2.在从节点上查看二进制日志文件,再查看数据库是否复制成功。
show slave status \G;
show databases;
可以看到主节点创建的数据库成功复制到从节点的数据库。
四.安装过程中注意的问题
1.安装过程中出现了一个问题,就是操作到最后一步发现创建主节点创建数据库没有复制到从节点,于是分析是不是从节点连接主节点数据库失败导致无法复制,执行以下命令:
mysql -u repluser -p -h 10.0.0.61 -P3306
出现如下问题:
上面的问题与用户名密码无关,如果是密码的问题不会是上面的提示。
最后发现是主节点安装mysql的时候默认设置了绑定本地本地IP地址127.0.0.1,导致其他节点无法访问主节点mysql。
vi /etc/mysql/mysql.conf.d/mysqld.cnf
不同版本的mysql可能配置文件有所差别,发现以下配置:
将bInd-address该行注释以后,重启mysql问题解决。
参考:https://blog.csdn.net/daicooper/article/details/79905660
https://blog.csdn.net/fhxpp_27/article/details/8442555/