主从同步
什么是主从同步: 让其他的数据库服务器自动同步正在提供服务的数据库服务器上 的数据。
1 添加授权用户
mysql> grant replication slave on *.* to [email protected]"192.168.4.4" identified by '123456';
2启用binlog日志
[[email protected] ~]# vim /etc/my.cnf
[mysqld]
server_id=3
log-bin=master11
binlog_format="mixed"
重启数据库服务
[[email protected] ~]# systemctl restart mysqld
4 查看日志信息
mysql> show master status;
master11.000001
验证主库提供的授权用户
[[email protected] ~]# mysql -h 192.168.4.3 -u slaveuser -p123456
修改配置文件
[[email protected] ~]# vim /etc/my.cnf
[mysqld]
server_id=4
log-bin=db4
[[email protected] ~]# systemctl restart mysqld
使用本机器的数据管理员登录,指定主库信息
show slave status;
mysql> change master to master_host="192.168.4.3", master_user="slaveuser",master_password="123456",master_log_file="master11.000001",master_log_pos=154;
mysql> show slave status\G;
Master_Log_File: master11.000001
Read_Master_Log_Pos: 154
Slave_IO_Running: No
Slave_SQL_Running: No
mysql> start slave;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
slave 运行2个线程
Slave_IO:复制master主机 binlog日志文件里的sql到本机的relay-log文件里
Slave_SQL:执行本机relay-log文件里的SQL语句,重现Master的数据操作
从数据库目录下会多的文件
master.info 连接主服务器信息
relay-log.info 中继日志信息
主机名-relay-bin.000000 中继日志文件
主机名-relay-bin.index 中继日志索引
测试主从同步配置
在主库服务器上添加访问数据的用户
mysql> grant all on bbsdb.* to [email protected]"%" identified by '123456';
mysql> show master status;
| master11.000001 | 446
在客户端使用授权用户连接主库,产生的数据在从库也能查到
[[email protected] ~]# mysql -h 192.168.4.3 -uyaya -p123456
MySQL [(none)]> create database bbsdb;
这时在
[[email protected] ~]# 主服务器
[[email protected] ~]# 从服务器
上都会生成相应的表
将从服务器变被独立服务器,关闭同步
mysql> stop slave;
rm -rf master.info relay-log.info
rm -rf localhost-relay-bin*
故障分析及排除
原因分析
连接不上master数据库服务器
解决办法
检查物理连接ping 检查授权用户
检查是否有防火墙规则
关闭SElinux
或是binlog日志文件指定错误
主从同步结构模式
一主一从
一主多从
主从从
主主结构(互为)
主从同步常用配置参数
写在vim /etc/my.cnf
[mysqld]
选项=值
主库配置文件(对所有的从都有效)
不允许同步的库 binlog_ignore_db=库名1,库名2
只允许同步的库 binlog_do_db=库名1,库名2
[[email protected] ~]# vim /etc/my.cnf
binlog_do_db=dba
[[email protected] ~]# systemctl restart mysqld
从库配置文件(只对本机有效)
只同步的库 replicate_do_db=库名1,库名2
不同步的库 replicate_ignore_db=库名1,库名2
级联复制 log_slave_updates
数据读写分离 maxscale软件 + 一主一从
什么是读写分离: 把客户端访问数据时的查询请求select 和写请求insert 给不同的数据库服务器去处理
写(主服务)
读 (从服务)
一。
装包
[[email protected] ~]# rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm
修改配置文件:指定数据库服务器
[[email protected] ~]# vim /etc/maxcale.cnf
9 [maxscale]
10 threads=auto 开启线程 根据cpu
18 [server1] #数据库服务器名
19 type=server
20 address=192.168.4.3 #指定ip
21 port=3306
22 protocol=MySQLBackend
23
24 [server2] #数据库服务器名
25 type=server
26 address=192.168.4.4 #指定ip
27 port=3306
28 protocol=MySQLBackend
36 [MySQL Monitor]
37 type=monitor
38 module=mysqlmon
39 servers=server1,server2 #监听两台 数据库服务器
40 user=scalemon #授权用户名
41 passwd=123456 #授权用户密码
42 monitor_interval=10000 #毫秒 每十秒监听一次
52 #[Read-Only Service] #Read-Only 全注释
53 #type=service
54 #router=readconnroute
55 #servers=server1
56 #user=myuser
57 #passwd=mypwd
58 #router_options=slave
63 [Read-Write Service]
64 type=service
65 router=readwritesplit
66 servers=server1,server2 #监听两台 数据库服务器
67 user=maxscale #授权用户名
68 passwd=123456 #授权用户密码
69 max_slave_connections=100%
75 [MaxAdmin Service] #定义软件管理服务 不用改
76 type=service
77 router=cli #使用方式 命令行
85 #[Read-Only Listener] #Read-Only 全注释
86 #type=listener
87 #service=Read-Only Service
88 #protocol=MySQLClient
89 #port=4008
91 [Read-Write Listener]
92 type=listener
93 service=Read-Write Service #服务名
94 protocol=MySQLClient
95 port=4006 #读写分离监听端口号(默认)
97 [MaxAdmin Listener] #管理服务监听
98 type=listener
99 service=MaxAdmin Service
100 protocol=maxscaled
101 socket=default
102 port=4009 #指定管理端口
根据配置文件设置,在数据库上添加相应的授权用户
scalemon 123456 监控数据库服务状态的用户(数据库服务状态和主从同步状态)
mysql> grant replication slave,replication client on *.* to [email protected]'%' identified by '123456';
mysql> grant select on mysql.* to [email protected]'%' identified by '123456';
maxscale 123456 检查客户端连接时使用的用户名和密码在监视的数据库服务器上是否存在
在代理主机测试
mysql -h192.168.4.3 -uscalemon -p123456
mysql -h192.168.4.3 -umaxscale -p123456
mysql -h192.168.4.4 -umaxscale -p123456
mysql -h192.168.4.4 -uscalemon -p123456
启动服务
[[email protected] ~]# maxscale -f /etc/maxscale.cnf
[[email protected] ~]# netstat -pantu | grep maxscale
tcp 0 0 192.168.4.5:42703 192.168.4.3:3306 ESTABLISHED 4877/maxscale
tcp 0 0 192.168.4.5:44918 192.168.4.4:3306 ESTABLISHED 4877/maxscale
tcp6 0 0 :::4009 :::* LISTEN 4877/maxscale
tcp6 0 0 :::4006 :::* LISTEN 4877/maxscale
二。
测试配置
在代理服务器本机访问管理服务
[[email protected] ~]# maxadmin -uadmin -pmariadb -P4009
MaxScale> list servers
Servers.
----------------------------------+------------------------------+------------+----------------------+------------------------------
Server | Address | Port | Connections | Status
----------------------------------+------------------------------+------------+----------------------+------------------------------
server1 | 192.168.4.3 | 3306 | 0 | Master, Running
server2 | 192.168.4.4 | 3306 | 0 | Slave, Running
----------------------------------+------------------------------+------------+----------------------+-------------------------------
在客户端 访问代理服务器 存储数据或查询数据
4-3
mysql> create database bbsdb;
Query OK, 1 row affected (0.00 sec)
mysql> create table bbsdb.t1(id int);
Query OK, 0 rows affected (0.26 sec)
MySQL [(none)]> show grants;
+---------------------------------------------------------------------------------------+
| Grants for [email protected]% |
+---------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'yaya'@'%' |
| GRANT ALL PRIVILEGES ON `bbsdb`.* TO 'yaya'@'%' |
+---------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
查看时显示为从服务
MySQL [(none)]> select @@hostname;
+---------------------+
| @@hostname |
+---------------------+
| 4-4mysql |
+---------------------+
1 row in set (0.00 sec)
MySQL [(none)]> insert into bbsdb.t1 values(100);
添加后切换为主服务
MySQL [(none)]> select @@hostname;
+---------------------+
| @@hostname |
+---------------------+
| 4-3mysql |
+---------------------+
1 row in set (0.00 sec)
原文地址:http://blog.51cto.com/13558754/2057517