MySQL之主从复制,一主一从架构。

一、主库搭建:

编辑mysql配置文件

vim /etc/my.cnf
[mysqld]
server-id=1 			 #数据库唯一ID,主从的标识号绝对不能重复
log-bin=mysql-bin 		 #开启log-bin,并指定文件目录和文件名前缀
binlog-do-db=edu		 #需要同步的数据库,可以多写几行来配置多个库同步
binlog_ignore_db=mysql 	 #不需要同步的数据库,可以多行或者逗号分隔
lower_case_table_names=1 #说明 0:区分大小写,1:不区分大小写
sync_binlog=1			 #确保binlog日志写入后于硬盘同步

重启 mysql 服务

centos 7 :   systemctl restart mysql
centos 8 :   service mysql restart
rocky 9.0:   /usr/local/mysql/support-files/mysql.server restart 

创建MySQL同步用户

mysql -uroot -p'123456'
### 只有同步的权限
grant replication slave on *.* to db_slave@'%' identified by '123456';
flush privileges;

或者使用以下方法创建也可以

create user 'db_slave'@'%' identified by '123456';
GRANT REPLICATION SLAVE on *.* to 'db_slave'@'%';
select user,host from mysql.user;
flush privileges;

在 mysql 8.0以后的版本中 建用户需要使用以下命令
需要修改一下mysql_native_password 或者使用 caching_sha2_password
因为在mysql 8.0 以后的版本中 sha256_password 已经被弃用

grant all privileges on *.* to db_slave@'%' identified by '123456' with grant option;
create user db_slave@'%' identified by '123456';
flush privileges;
alter user db_slave@'%' identified with mysql_native_password by '123456';

查看权限:

show grants for 'db_slave'@'%';
flush privileges;

查看master状态

show master status;

如果是在以有数据的数据库中做主从
首先登陆数据库,然后刷新所有的表,同时给数据库加上一把锁,阻止对数据库进行任何的写操作

mysql -uroot -p'123456'
mysql > flush tables with read lock;
mysql > exit;

在命令行开始导出数据:

mysqldump -uroot -p'123456'  -S /var/lib/mysql/mysql.sock --all-databases   > mysql.bak.sql

如果数据量很大,可以在导出时就压缩为原来的大概三分之一

mysqldump -uroot -p'123456' -S /var/lib/mysql/mysql.sock --all-databases | gzip > mysql.bak.sql.gz

二、 从库开始操作

vi /etc/my.cnf

server-id=2
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
## 忽略表
replicate-wild-ignore-table=mysql.*
replicate-wild-ignore-table=sys.*

重启服务器

centos 7 :   systemctl restart mysql
centos 8 :   service mysql restart
rocky 9.0:   /usr/local/mysql/support-files/mysql.server restart 

如果主服务器导出了数据,下面就导入该文件,如果主服务器没有数据,就忽略这一步

mysql -uroot -p'123456' 
mysql > source /root/mysql.bak.sql

如果从主服务器上拿过来的是压缩文件,就先解压再导入

关联master用户,master_log_file和master_log_pos必须跟master提供的一致

mysql> CHANGE MASTER TO
  MASTER_HOST='主库IP地址',
  MASTER_USER='db_slave',
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;

启动slave

	start slave;

查看salve状态

show slave status \G

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

在这里插入图片描述

这时可以回到主库服务器上对主数据库解锁,恢复对主数据库的操作

mysql -uroot -p'123456'
mysql > unlock tables;

测试:
在主库上建一个数据库

mysql  -uroot -p123456
mysql > create database test;

登陆从库:

mysql -uroot -p123456
mysql > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tagman             |
| test               |
+--------------------+
6 rows in set (0.01 sec)

大功告成;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值