Mysql主从配置 - Go语言中文社区

Mysql主从配置


mysql主备配置的时候,这时主添加数据,备库未更新,这时有查询进来,查询到了备库。如何解决。
可以sql语句强行走主节点。具体要根据mysql采用哪一种读写分离代理。
5.1后支持,需要安装插件,还可以半同步,主在存data的时候处于阻塞,等待从节点存入relay binlog返回后。性能差。当主挂掉的时候,主始终处于阻塞状态,从始终得不到更新,解决办法是可以设置阻塞等待时间,一般情况下设置成1秒,但不保证安全。默认是采用异步的。
5.7mysql可以多线程
1主 3-4从 1太子节点(保证一致) 1个读 1个业务隔离
2主 应用场景写非常多,用双主。
环形多主,跟2主应用场景一样。
1主级联,与主联系的从挂掉之后,其余的从节点会挂。

如何解决指定读写库
Atlas
可以调权重。
查订单,从服务器可能更新不及时,可以指定注解/master/从主数据库中去查

半同步

还有一种叫Amoeba
https://blog.csdn.net/lhd85/article/details/48031289
http://blog.51cto.com/13598893/2092492
https://blog.csdn.net/m0_37886429/article/details/78844358
http://lizhao6210-126-com.iteye.com/blog/1716485

安装环境

centos 6.x
mysql mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz

mysql 依赖的库

yum search libaio # search for info
yum install libaio # install library
yum -y install numactl.x86_64
yum -y install perl perl-devel
yum -y install libaio-devel

创建mysql 与用户组,-s /bin/false 表示该用户不能登录

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

解压安装包至指定目录

tar zxvf mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz
ln -s mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz mysql

为 mysql 用户添加权限

chown -R mysql ./
chgrp -R mysql ./

创建data目录并添加权限

mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql

修改配置

编辑/etc/my.cnf

master配置

[mysqld]
basedir=/opt/mysql
datadir=/data/mysql
character-set-server=utf8
#rpl_semi_sync_master_enabled=1
server-id=1
#binlog 格式 
binlog-format=ROW 
log-bin=mysql-master-bin 
#slave更新时是否记录到日志中;
log-slave-updates=true
#需要同步的二进制数据库名;
binlog-do-db=tuling
#不同步的二进制数据库名,如果不设置可以将其注释掉;
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=personalsite
binlog-ignore-db=test

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

slave配置

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysqld]
basedir=/opt/mysql
datadir=/data/mysql
character-set-server=utf8
server-id=2
log-bin=mysql-slave-bin
binlog-do-db=tuling
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=personalsite
binlog-ignore-db=test
#rpl_semi_sync_slave_enabled=1

初始化 mysql 库

/opt/mysql/scripts/mysql_install_db --user=mysql --basedir=/opt/mysql --datadir=/data/mysql

添加环境变量

vi /etc/profile
PATH=/opt/mysql/bin:$PATH
export PATH
让刚才的修改生效
source /etc/profile

启动数据库

service mysql start

初始化mysql的一些设置

mysql_secure_installation
回车
Enter current password for root (enter for none):
y,设置mysql的root密码
Set root password?[Y/n] y
以下都yes
Remove anonymous users?[Y/n] y
Disallow root login remotely?[Y/n] y
Remove test database and access to it?[Y/n] y
Reload privilege tables now?[Y/n] y
ThanksforusingMySQL!

允许远程登陆

mysql -h localhost -u root -p

  1. mysql> use mysql;
  2. mysql> select host,user,password from user;
  3. mysql> update user set password=password('123456') where user='root';
  4. mysql> update user set host='%' where user='root' and host='localhost';
  5. mysql> flush privileges;

判断MySQL服务器是否支持动态增加插件
mysql> select @@have_dynamic_loading


image.png

主执行

grant replication slave,super,reload on . to slave1@ 从的IP identified by '123456';
···
命令解析:
'slave1'@'HOST' :设置用户名即主机ip或网段,网段用%表示 例如10.0.0.%
IDENTIFIED BY:设置密码
. :表示所有数据库,所有表
GRANT REPLCATION SLAVE:就是允许该用户复制数据
该命令作用就是授权slave1能拷贝数据库的所有内容
···

在master装一个插件"semisync_master.so",这个插件mariadb默认就有,安装插件:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
查询插件:
select * from mysql.plugin;

image.png

查看状态
SHOW GLOBAL VARIABLES LIKE '%semi%';
···
rpl_semi_sync_master_enabled ON
NO表示开启半同步功能,OFF表示关闭
rpl_semi_sync_master_timeout 10000
超时时间微秒为单位
rpl_semi_sync_master_trace_level 32
rpl_semi_sync_master_wait_no_slave ON
···

show master status;


image.png

从执行

安装插件:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
查询插件:
select * from mysql.plugin;

image.png

查看状态:
SHOW GLOBAL VARIABLES LIKE '%semi%';
···
rpl_semi_sync_slave_enabled ON
rpl_semi_sync_slave_trace_level 32
···
执行master配置:
change master to master_host='主IP', master_user='slave1', master_password='123456',master_log_file='主查询1', master_log_pos=主查询2;
···
命令解析:
CHANGE MASTER TO
MASTER_HOST='master_host',
指定中继master主机IP
MASTER_USER='repluser',
指定master被授权的用户名
MASTER_PASSWORD='replpass',
指定被master授权的用户密码
MASTER_LOG_FILE='mysql-bin.xxxxx',
指定master服务器的哪个二进制日志开始复制
MASTER_LOG_POS=#;
二进制日志位置,可以在master服务器上执行该命令查看,show master logs;
···

重启mysql

配置好mysql之后
编辑/etc/my.cnf
主#rpl_semi_sync_master_enabled=1
从#rpl_semi_sync_slave_enabled=1
如果之前不注释,mysql会无法启动
配置插件才能正常启动
service mysql restart

登陆从mysql

启动slave

mysql>start slave;

查看 slave 状态

show slave statusG;
Slave_IO_Running: Yes "重点关注如果是NO表示线程没起来"
Slave_SQL_Running: Yes "重点关注 如果是NO表示该线程没起来"

故障排除

半同步配置完毕,下面可以通过命令来验证:
msyql> show status like '%semi_sync%'
mysql> show variables like '%Rpl%'

版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/1ac47c00a5d9
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-12 13:28:22
  • 阅读 ( 1180 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢