MySQL主从复制搭建
介绍
两台或以上数据库实例,通过二进制日志,实现数据的“同步”关系
基本原理
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。
MySQL复制是基于主服务器在二进制日志中跟踪所有对数据库的更改。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到日志的数据。
当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
主从复制的作用
1、主数据库出现问题,可以切换到从数据库。
2、可以进行数据库层面的读写分离。
3、可以在从数据库上进行日常备份。
主从复制的前提
# 两台以上mysql实例 ,server_id不同
# 主库开启二进制日志
# 复制用户
# 保证主从开启之前从库数据是和主库一致
# 告知从库,复制user,passwd,IP port,以及复制起点(change master to)
# 开启(start slave)
查看server-id
# 进入mysql
select @@server_id
主库上查看是否开启log_bin
select @@log_bin
如果没有开启log_bin,需要在my.cnf中进行配置
vim /etc/my.cnf
# mysqld下面添加
log_bin=mysql-bin
创建复制用户
grant replication slave on *.* repl@'192.168.66.%' identified by 'Ming1234@';
由于密码安全规则问题,我这里需要设置大小写字母+数字+特殊符号。
主库备份恢复到从库
语法:
备份指定库中的部分表:
mysqldump [选项] 库名 [表名 1] [表名 2] … > /备份路径/备份文件名备份一个或多个完整的库(包括其中所有的表)
mysqldump [选项] 库名 [表名 1] [表名 2] … > /备份路径/备份文件名备份 MySQL 服务器中所有的库。
mysqldump [选项] --all-databases > /备份路径/备份文件名其中,常用的选项包括“-u”、“-p”,分别用于指定数据库用户名、密码
# 备份所有的内容到当前目录下
mysqldump -uroot -proot1234 --opt --all-databases > all-database.sql
# 在从库上恢复备份
mysql -uroot -proot1234 < all-database.sql
设置从库复制信息
change master to就是从库要复制的信息配置
# 进入mysql,使用help命令,查看帮助
help change master to
红框中这一部分内容是咱们要用的
CHANGE MASTER TO
MASTER_HOST='192.168.66.111', # 主机的IP
MASTER_USER='repl', # 刚才新建的复制用户,repl
MASTER_PASSWORD='Ming1234@', # 复制用户的密码 Ming1234@
MASTER_PORT=3306, # 主库的端口号
MASTER_LOG_FILE='mysql-bin.00001', # 主库的log_bin文件, 进入数据库,show master status; 可以查看
MASTER_LOG_POS=448, # 主库log_bin的开始复制位置
MASTER_CONNECT_RETRY=10; # 断开连接以后重试次数
把change master to 的那些内容在从库上执行一下。主从复制就搭建成功了。
启动复制线程
start slave;
测试
# 在主库上新建test数据库
create database test charset=utf8mb4;
# 在从库上展示数据库
show databases;
从库上出现test数据库,创建成功。
使用命令查看
show slave status \G;
恭喜你,安装成功了。