主从复制应用场景
MySQL 主从复制集群功能使得 MySQL 数据库支持大规模高并发读写成为可能,同时有效地保护了物理服务器宕机场景的数据备份。
1、从服务器作为主服务器的实时数据备份。
2、主从服务器实现读写分离,从服务器实现负载均衡。
3、把多个从服务器根据业务重要性进行拆分访问。
主从复制实战(一主多从)
这里准备三台主机,没有条件,可以用虚拟机代替
主服务器:192.168.1.235
从服务器1:192.168.127.129
从服务器2:192.168.127.130
主机之间相互能ping的通,在三台主机上面安装各自mysql,我这里用的是5.7版本
主服务器配置:
找到mysql配置文件,可以在【服务】里面找到mysql配置文件的位置
打开配置文件,在【mysqld】节点下添加
#唯一,要与从机的不同
server-id = 1
# Binary Logging.
#开启二进制日志
log-bin= mysql-bin
注意server-id要唯一。
命令行登录mysql,mysql -uroot -proot
1、分别给两个从服务器创建用户:
CREATE USER '使用名'@'备机IP地址' IDENTIFIED BY '密码';#创建用户
2、分别给两个从服务器用户赋权
GRANT REPLICATION SLAVE ON *.* TO '使用名'@'备机IP地址';#分配权限
3、刷新权限
flush privileges
4、重启mysql,登录mysql,输入show master status;
5、为防止position一直变动,此时我们给主服务器加上只读锁
flush table with read lock;
从服务器配置:
这里只配置一个,另一个也是一样的配置
1、同主服务器一样,在mysql配置文件中,加入
#唯一,要与主机或其他从机的不同
server-id = 2
# Binary Logging.
#开启二进制日志
log-bin= mysql-bin
2、重启mysql服务器,登录mysql服务器,mysql -uroot -proot
CHANGE MASTER TO
MASTER_HOST='192.168.1.235', #主机的IP
MASTER_USER='slave1', #之前创建的那个使用名
MASTER_PASSWORD='slave1', #密码
MASTER_LOG_FILE='mysql-bin.000007', #这是主库中show master status;File下的那个值
MASTER_LOG_POS=154;#这是主库Position下的那个值
开启slave同步进程
start slave;
查看slave状态
show slave status\G
当Slave_IO_Running和Slave_SQL_Running都yes时,主从复制创建成功。
主服务器给表解锁:unlock tables
在主服务器创建数据库:
库名:123,建表:test,插入数据
从服务器1:192.168.1.129
从服务器2:192.168.1.130
到此,mysql一主多从已经搭建完毕
常见错误:
1、出现Slave_IO_Running:No:https://www.jb51.net/article/27220.htm
2、出现Slave_SQL_Runing:No:
3、当主服务器中有个库从服务器从来没有,如果主服务器操作之后,从服务器就会存在一个或多个事务需要手动去跳过
slave stop;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳过一个事务
slave start
不然就会在之后的同步过程中会同步失败,想要通过配置,自动跳过这些错误的事务,在mysql的配置文件【mysqld】节点中加入
slave-skip-errors=all