(11)MySQL数据库的主从设置

前言:

主从数据库能同步主库的内容,可以做备份和分离读写作用。主库生成log和dump日志线程,从库生成I/O线程和SQL线程,进行复制和读写。

一、环境准备

1、主库只要一个,从库可以有三四个。在做主从的时候,要使所有用户不能写入数据库,只给读的权限,所有提前创建需要的用户和数据。

2、master:192.168.121.200:master.example.com做主库

    salve:192.168.121.100:slave.example.com做从库。

     数据库内容一致,双方都要上锁。从库不用,主库需要。

3、关掉防火墙和selinux,做时间同步。可以相互通信做远程登录。远程登录需要时间一致。

二、实验步骤

创建可以复制内容的用户repl1后面要用到,上锁,全量备份数据库到slave端。配置文件。

2.1、设置从库的数据库文件,mysql的搭建前面有

[root@slave ~]# vim /etc/my.cnf       从库开启日志功能

[mysqld]    //随便命名
basedir = /usr/local/mysql   //工作目录
datadir = /opt/data        //存放数据的目录
socket = /tmp/mysql.sock    //指针,用于决定使用哪个数据库
port = 3306    //端口号
pid-file = /opt/data/mysql.pid    //进程文件
user = mysql   //定义的程序用户
skip-name-resolve    //跳过主机名
server-id =     //标识id号大于主库,越小越优先
relay-log = mysql-relay-bin      //启用中继日志relay-log,复制功能
symbolic-links = 0     //不启动软连接(符号连接)
log-error = /var/log/mysqld.log   //填写错误日志文件

[root@slave ~]# systemctl restart mysqld

2.2、设置主库的配置文件

[root@master ~]# vim /etc/my.cnf 

[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
log-bin = mysql-bin   //启用binlog日志
server-id =   //数据库服务器唯一标识符,主库的server-id值必须比从库的小
symbolic-links = 0
log-error = /var/log/mysqld.log

[root@master ~]# systemctl restart mysqld.service

mysql> create user 'repl1'@'192.168.121.100' identified by '123';

[root@mysql ~]# mysqldump -uroot -p123 --all-databases > /opt/all-20240806.sql   全量备份主库的内容

[root@mysql ~]# scp /opt/all-20240806.sql root@192.168.121.100:/opt/      复制数据库所有的内容给从库

mysql> grant replication slave on *.* to 'repl1'@'192.168.121.100';  给repl1用户复制的权限,给从库登录使用

mysql> flush privileges;  刷新权限

mysql> flush tables with read lock;  上锁,不能写,只能读

mysql> show master status;     查看日志文件名字和pos值,后面设置从库的时候要使用

将数据传给slave主机

[root@slave ~]# mysql -uroot -p123 < /opt/all-20240806.sql 

mysql> change master to master_host='192.168.121.200',       //连接主库
    -> master_user='repl1',      //用户用repl1
    -> master_password='123',         //repl1的密码是123
    -> master_log_file='mysql-bin.000001',    //查看主库的日志文件mysql-bin.000001
    -> master_log_pos=154;        //pos号为154
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;      启动从库设置
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status /G;  查看两个线程都为yes,主从设置成功大写的g,为竖着看

三、测试

3.1、主库插入数据

mysql> exit;    退出锁

[root@master ~]# mysql -uroot -p123

insert into student values(23,'ll',19,'man',198,5);  在主库插入一条数据

3.2、从库查看到数据同步

[root@slave ~]# mysql -uroot -p

mysql> use student; 

mysql> select * from student;   //查看主从设置成功

扩展:

在从库插入的数据,主库不会同步。在主库插入从库中已有的数据,从库会显示两条一模一样的数据。均不会报错,如果主库做了唯一约束,主库插入相同数据时,不会报错,从库SQL进程出现错误,从库失效。删除从库多余的内容,重启从库服务就行了。

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值