一、MySQL一主一从
二、配置主从从同步结构
三、配置半同步复制模式
1、主从同步原理
2、构建主从同步
1)确保数据保持一致
例:
主库:
一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):
1、导出数据和表结构:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/ mysqldump -uroot -p abc > abc.sql
敲回车后会提示输入密码
2、只导出表结构
mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/ mysqldump -uroot -p -d abc > abc.sql
注:/usr/local/mysql/bin/ —> mysql的data目录
二、导入数据库
1、首先建空数据库(要与删除的表名一致)
mysql>create database abc;
2、导入数据库
方法一:
(1)选择数据库
mysql>use abc;
(2)设置数据库编码
mysql>set names utf8;
(3)导入数据(注意sql文件的路径)
mysql>source /home/abc/abc.sql;
方法二:
mysql -u用户名 -p密码 数据库名 < 数据库名.sql
#mysql -uabc_f -p abc < abc.sql
2)配置主服务器(192.168.4.51)
]# vim /etc/my.cnf
[mysqld]
.......
log_bin=master51
server_id=51
binlog_format="mixed"
........
]# systemctl restart mysqld
]# ls /var/lib/mysql/master1.* //查看日志文件
-授权用户
对所有库(默认不允许对单个库)有同步权限
mysql> grant replication slave on *.* to repluser@"%" identified by "[email protected]";
mysql> show master status;
3)配置从服务器(192.168.4.52)
调整运行参数
-指定server_id 不允许与主库server_id值相同
]# vim /etc/my.cnf
.....
[mysqld]
server_id=52
.......
]# systemctl restart mysqld
指定主库信息–>-要用自己的root进入数据库
]# mysql -u root -p123456
mysql> change master to
> master_host="192.168.4.51", //主库IP地址
>master_port=3306, //默认是3306
> master_user="repluser", //主库授权用户名
> master_password="[email protected]", //授权用户密码
> master_log_file="master51.000001", //日志文件
> master_log_pos=441; //偏移位置
mysql> show master status; //查看偏移位置l
mysql> start slave; //启动slave进程
注意:1、Master信息会自动保存到/var/lib/mysql/master.info文件
2、以后要更改master信息时,应先stop slave
–查看slave状态
确认IO线程、SQL线程都以运行
mysql> show slave status\G; //查看当前的从库状态
Slave_IO_Running: Yes //IO线程已运行
Slave_SQL_Running: Yes //SQL线程已运行
mysql> show slave status\G; //查看当前的从库状态
问题:线程没运行。
解决方法:Last_IO_Error: 具体报错信息
Last_SQL_Error: 具体报错信息
1、主从uuid一致
cat auto.conf //查看uuid
vim auto.conf //修改uuid
2、配置不上从库可能是格式错误
3、用户连不上主,是密码错误
select user,host from mysql.user;
set paassword for reluser@“从库IP”=password(“密码”);
4)日志偏移量问题
show master status;
4)客户端测试(192.168.4.50)
主库(51)授权要连接的用户
mysql > grant all on gamedb.* to webuser@"%" identified by "[email protected]";
客户端(50)使用授权用户连接主库(51)
]# mysql -h192.168.4.51 -uwebuser [email protected]
mysql> create database gamedb;
Query OK, 1 row affected (0.19 sec)
mysql> create table gamedb.a(id int);
Query OK, 0 rows affected (0.38 sec)
mysql> insert into gamedb.a values(111);
Query OK, 1 row affected (0.11 sec)
mysql> insert into gamedb.a values(111);
Query OK, 1 row affected (0.17 sec)
mysql> insert into gamedb.a values(111);
Query OK, 1 row affected (0.09 sec)
在其他从库上也能看到相同的数据
把从服务器还原初始状态
存放的路径:/var/lib/mysql
删除以上的配置即可
1)查看是否允许动态加载模块默认允许
mysql> show variables like 'have_dynamic_loading';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| have_dynamic_loading | YES |
+----------------------+-------+
1 row in set (0.01 sec)
2)命令行加载插件,用户需有SUPER权限
主库上面操作。
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
从库上面操作:
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
主库:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE |
+----------------------+---------------+
从库:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
+---------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+---------------------+---------------+
| rpl_semi_sync_slave | ACTIVE |
+---------------------+---------------+
3)启用半同步复制,在安装完插件后,半同步复制默认是关闭的
主库上面执行:
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
从库上面执行:
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
主库:
mysql> show variables like "rpl_semi_sync_%_enabled";
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON |
+------------------------------+-------+
从库:
mysql> show variables like "rpl_semi_sync_%_enabled";
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
+-----------------------------+-------+
4)永久启用半同步复制
主库配置:
]# vim /etc/my.cnf
[mysqld]
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
从库配置:
]# vim /etc/my.cnf
[mysqld]
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
在高可用架构下,master和slave需同时启动,以便在切换后能继续使用半同步复制
]# vim /etc/my.cnf
[mysqld]
plugin-load
="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1