MYSQL数据库主从复制
mysql数据库安装
我是在docker上安装的mysql数据库的
-
查询mysql
docker search mysql
-
安装mysql镜像
docker pull mysql
-
查看镜像
docker images
-
启动容器
mysql-slave是容器名称 不能重复 docker run -itd --name mysql-slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-
查看容器
docker ps -a
-
进入mysql容器,并登陆
docker exec -it e815f19c9efa bash mysql -uroot -p
-
开启远程访问权限
use mysql; select host,user from user; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; flush privileges;
-
安装完成之后使用远程工具连接试试, 第二台也是以上的操作
MySql完成主从复制
-
Master节点配置/etc/mysql/my.conf(master节点执行)
> vim /etc/mysql/my.cnf [mysqld] ## 同一局域网内注意要唯一 server-id=100 ## 开启二进制日志功能,可以随便取(关键) log-bin=mysql-bin ## 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步) binlog-ignore-db=mysql ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size=1M ## 主从复制的格式(mixed,statement,row,默认格式是statement) binlog_format=mixed
操作完成需要重启mysql服务
-
Slave节点配置/etc/mysql/my.conf(slave节点执行)
> vim /etc/mysql/my.cnf [mysqld] ## 设置server_id,注意要唯一 server-id=102 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin ## relay_log配置中继日志 relay_log=edu-mysql-relay-bin ##复制过滤:不需要备份的数据库,不输出(mysql库一般不同步) binlog-ignore-db=mysql ## 如果需要同步函数或者存储过程 log_bin_trust_function_creators=true ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size=1M ## 主从复制的格式(mixed,statement,row,默认格式是statement) binlog_format=mixed ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062
操作完成需要重启mysql服务
-
在master服务器上授权slave服务器可以同步的权限
mysql > mysql -uroot -pmaster的密码 # 授予slave服务器可以同步master服务 这个是不同服务器上的 mysql > grant replication slave, replication client on *.* to 'root'@'slave服务的ip' identified by 'slave服务器的密码'; # 如果是使用docker的话 # 创建同步用户 mysql > CREATE USER slave; #设置同步用户权限 mysql > GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by slave; mysql > flush privileges; # 查看MySQL现在有哪些用户及对应的IP权限(可以不执行,只是一个查看) mysql > select user,host from mysql.user;
查询master服务的binlog文件名和位置(master节点执行)
-
slave进行关联master节点(slave节点执行)
- 进入到slave节点:
mysql > mysql -uroot -p你slave的密码
- 开始绑定:
# 如果是使用docker安装的mysql那么master服务器的ip就去查询dokcer容器ip使用下面的命令 # 这个是查询dokcer容器ip地址命令 docker inspect 容器ID mysql> change master to master_host='master服务器ip', master_user='root', master_password='master密码', master_port=3306, master_log_file='mysql-bin.000001',master_log_pos=1178; #这里注意一下 master_log_file 和 master_log_pos 都是通过 master服务器通过show master status获得。
-
在slave节点上查看主从同步状态(slave节点执行)
#启动主从复制 mysql> start slave; Query OK, 0 rows affected (0.00 sec) #再查看主从同步状态 mysql> show slave status\G; # 停止复制 mysql> stop slave;
以上就算是主从复制成功了。