本帖最后由 鸭鸭鸭鸭 于 2019-3-6 17:26 编辑
MySQL数据库主从
概述
主从复制通过三个过程实现,其中一个过程发生在主服务器上,另外两个过程发生在从服务器上。具体情况如下:主服务器将用户对数据库的写操作以二进制格式保存到 Binary Log(二进制日志)文件中, 然后由 Binlog Dump线程将二进制日志文件传输给从服务器。 从服务器通过一个 I/O 线程将主服务器的二进制日志文件中的写操作复制到一个叫 Relay Log 的中继日志文件中。 从服务器通过另一个 SQL 线程将 Relay Log 中继日志文件中的写操作依次在本地执行,从而实现主从服务器之间的数据的同步。
优点
- 增加健壮性。主服务器出现问题时,切换到从服务器作为备份。
- 优化响应时间。不要同时在主从服务器上进行写操作,这样可能引起冲突。
- 在从服务器同步数据(备份)过程中,主服务器继续处理客户端的写操作。
MySQL数据库安装
我们这里准备2台虚拟机,分别是192.168.211.129和192.168.211.130,在每台服务器上安装MySQL。
检查系统是否安装其他版本的MYSQL数据
#yum list installed | grep mysql
#yum -y remove mysql-libs.x86_64[/mw_shl_code]
安装及配置
# wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
# rpm -ivh mysql-community-release-el6-5.noarch.rpm
# yum repolist all | grep mysql
安装MYSQL数据库
# yum install mysql-community-server -y
设置为开机启动(2、3、4都是on代表开机自动启动)
# chkconfig --list | grep mysqld
# chkconfig mysqld on
账号配置
启动MySQL
# service mysqld start
设置root密码
# mysql_secure_installation
输入后直接按回车,然后所有选项直接选y即可。
root账号登录
# mysql -uroot -p
#授权并刷新权限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你设置的密码' WITH GRANT OPTION;
mysql> flush privileges;[/mw_shl_code]
2台机器按照这个步骤安全即可。
MySQL主从配置
我们这里以192.168.211.129为主数据库,192.168.211.130为从数据库,我们接下来分别配置一下主数据库和从数据库。后面我们分别用Master和Slave来描述192.168.211.129和192.168.211.130虚拟机的数据库。
主数据库配置(Master)
创建用户并授权
在Master上创建用户,并授予主从复制权限。
#创建repl用户
mysql> create user repl;
#授权,并设置密码为123456
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.211.%' IDENTIFIED BY '123456';
#刷新全新
mysql> flush privileges;
修改/etc/my.cnfmy.cnf
修改配置如下
#开启二进制日志
log-bin=mysql-bin
#标识唯一id(必须)
server-id=1
#不同步的数据库,可设置多个
binlog-ignore-db=mysql
#指定需要同步的数据库(和slave是相互匹配的),可以设置多个
binlog-do-db=demo
#日志清理时间 (可选)
expire_logs_days=2
#日志大小(可选)
max_binlog_size=100m
#缓存大小(可选)
binlog_cache_size=4m
#最大缓存大小(可选)
max_binlog_cache_size=521m
注意:* 上面的配置务必放在[mysqld]下面。
配置完了后重启mysql,并查看状态,否则配置会一直失败,Empty set(0.00 sec)。
service mysqld restart
show master status
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 120 | demo | mysql | |
+------------------+----------+--------------+------------------+-------------------+
从数据库配置
修改/etc/my.cnf
server-id=2
replicate-do-db=demo
replicate-ignore-db=mysql
#是将从服务器从主服务器收到的更新记入到从服务器自己的二进制日志文件中
log-slave-updates
#跳过错误,从机一般应该配置该项
slave-skip-errors=all
#网络故障超时时间
slave-net-timeout=60
重启slave数据库
service mysqld restart
停止slave 并重置复制文件的坐标。
#停止slave
stop slave;
#master_host主数据库的IP
#master_user主数据库授权账号
#master_password主数据库授权账号密码
#master_log_file同步日志的文件
#master_log_pos同步日志文件的坐标
change master to
master_host='192.168.211.129',master_user='repl',master_password='123456',master_log_file='mysql
-bin.000003', master_log_pos=120;
#启动slave
start slave;
#查看slave状态
show slave status
此时,在Master中创建一张表,并且添加数据,Slave数据库中也会创建一张表,同时数据也会立刻同步过来。
MySQL主从原理
从库生成两个线程,一个I/O线程,一个SQL线程; i/o线程去请求主库 的binlog,并将得到的binlog日志写到relaylog(中继日志) 文件中; 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog; SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
总结
通过上面的例子,我们已经实现了MySQL数据库主从配置。mysql数据库不仅能配置一主一从,而且还能配置一主多从,还可以配置互为主从。在windows和linux环境下安装mysql,对应的配置文件也不一样,linux文件叫my.cnf,而windows下则叫my.ini。
|
|