实验准备

三台虚拟机都是欧拉系统。

IP:

        主库 -- 192.168.1.200

        从库 -- 192.168.1.201、192.168.1.202

虚拟机关闭防火墙、selinux安全。

安装MySQL

源码操作较为复杂,我这里通过dnf安装MySQL。

初始化配置

MySQL5.7版本以后,首次登录需要设置密码。

mysql_native_password:处理用户登录时的密码验证

alter user 'root'@'localhost' identified with mysql_native_password by '密码';          #设置密码
flush privileges;                                                                       #刷新策略

部署步骤

1、主库创建数据库,表

数据库:school

数据表:teacher

插入几条数据,方便后期测试,查看主从复制的效果。

主库192.168.1.200:

主从同步的前提是需要保证主库和从库的数据库一致,数据一致,因此从库需要创建与主库同名的数据库school,还需要将主库的数据进行导出,再导入到从库中。

2、主库全量备份数据

主库通过全量备份的方式导出数据,在本地生成以.sql结尾的文件。

再通过远程将数据发送到从库上。

mysql -uroot -p'密码' 数据库名 > 数据库名.sql        #导出数据,生成.sql文件
scp 数据库.sql root@IP地址:/root/                   #远程发送数据到/root/下

3、从库创建数据库

从库192.168.1.201、192.168.1.202:

4、从库导入数据表

mysql -uroot -p'密码' 数据库 < 数据库名.sql        #将sql文件导入到数据库中

 从库192.168.1.201、192.168.1.202:

5、主库开启二进制日志

主库192.168.1.200:

vim /etc/my.cnf.d/mysql-server.cnf

server-id=1                    #标识ID
log-bin=mysql-bin              #生成的二进制日志的名称  
binlog_format=mixed            #二进制日志记录的格式

systemctl restart mysqld       #重启服务

 注意:server-id是唯一的,每一台数据库的server-id不可相同。

6、主库授权用户

创建的用户,需要授权给从库有复制的权限,让从库用该用户登录到主库上,读取日志。

 *.*:表示所有库.所有表。

replication:标识复制。

create user '用户名'@'%' identified with mysql_native_password by '密码';        #创建用户
grant replication 用户名 on *.* to '用户名'@'%';                                 #授权用户
flush privileges;                                                               #刷新策略

7、锁定主库

锁定主库,记录主库的file和position信息,用于从库连接主库。

主从复制完成后,即可解锁。

flush tables with read lock;        #锁表
unlock tables;                      #解锁

8、从库开启中继日志 

从库192.168.1.201、192.168.1.202:

9、从库连接主库

主库192.168.1.200:

show master status\G;                #查看主库信息

 从库192.168.1.201、192.168.1.202:

change master to
    master_host='主库IP',
    master_user='主库授权的用户',
    master_password='用户的密码',
    master_log_file='查看主库信息中的file文件名',
    master_log_pos=查看主库信息中的position位置;

 注意:前四个参数需要加引号,master_log_file的引号中不能有空格,master_log_pos不需要加引号。

start slave;                    #启动主从同步
stop slave;                     #停止主从同步
show slave status\G;            #检查同步状态

注意:

        Slave_IO_RuningSlave_SQL_Runing均为yes,则同步成功。

        Slave_IO_RuningSlave_SQL_Runing均为no,或者某一个为no,则同步失败,需要先停止同步,检查所有配置,修改没问题后再开启主从同步。

解决方法:查看防火墙是否关闭、主库授权是否有问题、从库连接主库时的参数是否和主库对应。

测试

主库192.168.1.200插入数据:

从库192.168.1.201、192.168.1.202查看数据:

在主库中插入数据,从库也能查看到主库插入的数据,主从复制完成。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐