1.MySQL主从基本介绍
MySQL内建的复制功能是构建大型,高性能应用程序的基础。可以方便的实现数据的多处自动备份,实现数据库的拓展。复制过程中一个服务器充当主服务器,一个或多个其他服务器充当从服务器。主服务器将更新写入二进制日志,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制
2.MySQL主从复制准备工作
(1)主数据库:10.8.152.169 /Ubuntu 从数据库:10.8.152.110/Ubuntu
(2)两台虚拟机启动成功,并且能够相互ping通(ping 10.8.152.169; ping 10.8.152.110)
3.配置master
首先找到mysqld.cnf文件并修改配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf #这一步找到配置文件并进入编辑模式编辑
找到[mysqld]并在下面插入修改代码
bind_address = 0.0.0.0 #绑定地址设置为0.0.0.0确保所有的从服务器都能够连接
server-id = 110
log_bin = /var/log/mysql/mysql-bin.log #开启bin_log日志
expire_logs_days = 10 #日志的缓存时间
max_binlog_size = 200M #日志的最大大小
binlog_do_db = python #这里就是需要同步的数据库名称,这里选择python,下面我们创建一个python库
binlog_ignore_db = mysql #选择忽略同步数据库的名称,因为数据库自带一个mysql库,所以在这我们忽略掉mysql库
修改完配置文件之后一定要重启数据库服务使配置文件生效(service mysql restart)
4.配置slave
配置slave跟master的过程基本相同
首先找到mysqld.cnf文件并修改配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 这一步找到配置文件并进入编辑模式编辑
找到[mysqld]并在下面插入修改代码
bind_address = 0.0.0.0
server-id = 169
expire_logs_days = 10
max_binlog_size = 200M
binlog_do_db = python
binlog_ignore_db = mysql
重启数据库服务
5.创建需要同步的数据库及同步权限的账户
因为刚才我们写入配置文件中的同步数据库名称为python所以我们在主从数据库上都创建一个名称为python的数据库
mysql>create database python; #主从数据库都需要创建
在master上创建一个同步权限的账户,用来同步数据库
mysql>grant replication slave on *.* to 'shuang'@'%' identified by '123456' #这里我创建了一个账户名称为shuang密码 为123456 *.*代表指定数据库下的所有数据表
创建完数据表之后不要急着操作从库,必须先查看主库的状态,记录二进制文件名和位置
show master status; #查看主库的状态
如图,File里的mysql-bin.000002就是二进制日志文件名,Position就是二进制文件的位置,这两个信息配置从库的时候 需要用到,先记录下来。
6.配置从库
进入从服务器的数据库输入以下命令
mysql> change master to
-> master_host='10.8.152.169', #主服务器的ip地址
-> master_user='shuang', #刚刚创建的同步权限的账户
-> master_password='123456', #用户密码
-> master_port=3306, #端口号
-> master_log_file='mysql-bin.000002', #二进制日志文件名
-> master_log_pos=2550; #二进制文件的位置
如果你之前配置过从库的话,在这里直接配置会出错,需要先关闭从库(stop slave)
配置完成之后就能够查看是否成功
show slave status\G #查看从库的状态
如图查看从库的状态,如果图中最后两行出现yes说明从库配置成功,接下来就可以在主库中操作试验一下
如图我们在python这个数据库中新建了一个名叫cla的数据表
我们可以看到在从库中也出现了对应的cla数据表,当你插入或者删除数据的时候,从库也会进行相应的操作,MySQL的主从就已经成功了
最后,希望大家注意一点,MySQL主从在写入或修改文件的时候,一定要在主库中进行,避免在从库中修改数据与主库发生冲突。