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
- mysql> use mysql;
- mysql> select host,user,password from user;
- mysql> update user set password=password('123456') where user='root';
- mysql> update user set host='%' where user='root' and host='localhost';
- 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;
查看状态
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;
查看状态:
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 status\G;
Slave_IO_Running: Yes "重点关注如果是NO表示线程没起来"
Slave_SQL_Running: Yes "重点关注 如果是NO表示该线程没起来"
故障排除
半同步配置完毕,下面可以通过命令来验证:
msyql> show status like '%semi_sync%'
mysql> show variables like '%Rpl%'
网友评论