主从配置有两种思路:
1.使用两台centos7,每台centos7中只安装一个mysql8.
2.在同一台centos7中安装两个相同版本的mysql8,其中一个使用docker进行安装,两台mysql的ip地址会使用同样的ip地址,为了让区分,需要改变其中一个的端口号,使得两个mysql所占用的端口号不同。
本文先介绍第1种
准备:
1.在同一台vmware上安装两台linux,两台linux各自安装了mysql8.0.34,保证root用户是可以正常登陆的。版本具体是8点几不重要,重要的是,两台mysql的版本要一样,相似可能也行,但是为了避免没必要的问题,建议安装相同版本的。注意,如果其中一台linux是由另一台克隆得到的,在建立主从连接时需要修改uuid。
2.在同一台vmware上安装linux是保证两台linux的网络是通的。切记将主mysql所在的linux的防火墙关闭(命令为:systemctl disable firewalld)。检查两台linux的网络是否是相通,可以通过ping对方的ip,看是否可以ping的通。例如: linux1的ip为192.168.58.3,linux2的ip为192.168.58.4,在linux1中ping 192.168.58.4,ping的通,就说明两台linux的网络是通的。
3.这里将mylinux2作为主机,mylinux1作为从机,自然地,mylinux2中的mysql后面也称为主mysql,mylinux1的mysql后面也称为从mysql。mylinux3和mylinux4和本文章没有关系,不用关注。在mylinux2的mysql中,创建一个用户Q,并给Q授权可以进行远程登陆,有一个可以进行远程登录的用户非常重要,如果已经有了就可以不再创建了(使用非root用户)。如何创建一个mysql用户并授权可以进行远程登陆,请另外搜索文章。
1.修改MySQL从机配置⽂件
找到mylinux1中mysql8的配置文件my.cnf,一般在/etc下面
编辑my.cnf⽂件
在[mysqld]的下面配置
server-id=3
如果没有[mysqld],自己写出来之后再在下面配置。主要是用来给mysql服务器编号进行区分的,数字可以是任意的。从服务器中只用配置这一条即可。
修改之后,重启此mysql,重启命令如下:
systemctl restart mysqld
2.主从同步实现
1.配置主mysql
同样的,找到/etc下面的配置文件my.cnf并进行编辑。在[mysqld]下面进行配置。
log-bin=mysql-bin
server-id=4
这里是配置主mysql,所以要打开二进制日志,打开以后mysql的从服务器才可以读取到二进制日志信息。注意mysql的二进制日志和日志是不一样的,可自行搜索,这里不讲述区别。log-bin是打开二进制日志,mysql-bin是规定二进制日志文件名的开头为mysql-bin.编辑的配置信息如下图:
配置好以后要重启mysql,重启命令如下:
systemctl restart mysqld
2.从机备份主机原有数据
在做主从同步时,如果从机需要主机上原有数据,就要先复制⼀份到从机。
1.收集主机原有数据
在从机中输入linux命令:
mysqldump -umashibing -pAbc87654321! -h 192.168.58.4 mgdb --lock-all-tables > ~/master_db.sql
警告不用管,只要不报错,就代表成功了。
命令解析:
mysqldump:复制数据库的一个命令
-umashibing -pAbc87654321! :要登陆的主mysql的账号和密码,这就是前面要求创建
一个可以远程登录的mysql用户Q的原因,用来远程复制数据库。
-h 192.168.58.4 :主mysql的ip地址,也就是主mysql所在的linux的ip地址
mgdb : 指定要复制的数据库的名称为mgdb,这里修改为自己的具体的数据库名称就行了
--lock-all-table : 锁表,加上就对了,不加也可以,不必追究这个。
> ~/master_db.sql 将mgdb这个数据库中的信息保存到 ~目录下的master_db.sql这个文件中
注意:生成的master_db.sql这个文件中有mgdb这个数据库中的数据的SQL语句
2. 从机复制主机原有数据
将~目录下的master_db.sql这个文件中储存的数据映射到从数据库中
在从机中输入linux命令:
mysql -uroot -pAbc87654321! -e "USE mgdb; SOURCE ~/master_db.sql;"
命令解析:
这个命令使用 -e
选项来指定要在MySQL中执行的SQL语句,USE mgdb;意思是要将数据还原到的数据库,即要将master_db.sql这个文件中的数据还原到“从机mysql”的mgdb这个数据库中,所以,如果“从机mysql”中没有mgdb这个数据库,要先在从机mysql中创建mgdb这个数据库,命令为:create database mgdb;
注意:复制以后检查从机mysql中的数据库mgdb,看数据是否成功转移过来了!!!如果mgdb中没有本应存在的数据,可以打开master_db.sql文件,查看其中是否有创建数据表、数据相关的sql语句。如何打开sql文件?可以将其传到widows中,用sql-server打开,或者其他的能打开sql文件的软件也行。
例如sql-server打开master_db.sql文件以后,里面的内容如下:
3.主从同步实现
1. 在主服务器中创建用于从服务器同步数据的账号,这里是再次创建一个专门用于同步数据
的账号。
#登录到主机 mysql –uroot -pAbc87654321!
#创建用户repl CREATE USER 'repl'@'%' IDENTIFIED BY 'Abc87654321!';
#授予repl这个用户同步数据时要用到的的权利 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
#刷新权限 FLUSH PRIVILEGES;
2.展示主MySQL的⼆进制⽇志信息
将File和Position这两个的值记住!
3.从机mysql连接主机mysql
# 登录到从机 mysql -uroot -pAbc87654321!
#从机连接到主机,输入sql语句,sql的解析在下面 change master to master_host='192.168.58.4',master_user='repl',master_password='Abc87654321!',master_log_file='mysql-bin.000004',master_log_pos=3196;
#开启从机服务 start slave;
#展示从机服务状态 show slave status \G
如果不是两个yes。对应的错误,将在另一篇文章中讲解。
SQL语句的解析:
change master to
: 这是SQL语句的起始部分,表示接下来要修改主从复制的配置。
master_host='192.168.58.4'
: 这里指定了主数据库的IP地址,即要复制数据的来源。在这个
示例中,主数据库的IP地址是192.168.58.4。
master_user='repl'
: 这里指定了用于复制的MySQL用户的用户名。通常,这是一个具有适
当权限的用户,用于连接到主数据库并获取更新。
master_password='Abc87654321!'
: 这是用于连接到主数据库的MySQL用户的密码。这是保
密的信息,只有具有适当权限的人才能访问它。
master_log_file='mysql-bin.000004'
: 这是二进制日志文件的名称,它包含了主数据库上的
更改记录。从这个文件开始读取以进行复制。
master_log_pos=3196
: 这是在二进制日志文件中的位置,从这个位置开始读取并复制更改。
最后,测试:
在主机中新建⼀个数据库后,直接在从机mysql中查看这个数据库是否存在。