在海量数据项目中,查询的业务一般能占到百分之70以上(查询效率基本能体现项目的效率),增删改业务较少但是往往比较耗时,为了避免增删改来拉低查询效率,通常会采用多个数据库来完成负载高并发。这也是MySQL优化的一种。
分库的主要思路是:一主多从,指的是将数据库分为一个主库,多个从库,从库通过读取主库的二进制文件,并将数据复制到自身的库中。在实际项目中,查询时操作从库,以减轻MySQL的压力,涉及到增删改操作时操作主库,主库数据变动,从库的数据也会改变。
了解了主库与从库的关系,我们来配置主库与从库
- 安装两台虚拟机,在虚拟机上搭建MySQL并配置主从库(虚拟机的安装不做讲解)
- 下载MySQL在Linux下的安装包
- 安装MySQL
解压: tar -zxvf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
更名: mv mysql-5.6.33-linux-glibc2.5-x86_64 mysql
移动: mv mysql /usr/local
切换: cd /usr/local/mysql/
添加mysql组: groupadd mysql
添加mysql用户: useradd -r -g mysql mysql
修改当前目录拥有者为mysql用户: chown -R mysql:mysql ./
安装perl跟perl-devel: yum -y install perl perl-devel
安装perl-Data-Dumper : yum install -y perl-Data-Dumper
安装数据库: ./scripts/mysql_install_db --user=mysql
修改当前目录拥有者为root用户: chown -R root:root ./
修改当前data目录拥有者为mysql用户: chown -R mysql:mysql data
添加开机启动: cp support-files/mysql.server /etc/init.d/mysql
新建文件夹: mkdir /var/log/mariadb/
授权: chmod 700 /var/log/mariadb/
启动mysql : service mysql start
建立软连接: ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
修改mysql的root用户密码,root初始密码为空的:
./bin/mysqladmin -u root password 'root'
进入mysql: mysql -uroot -p
给root用户授权任何主机可以访问:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
grant all privileges on *.* to 'root'@'%' identified by 'root';
刷新授权: FLUSH PRIVILEGES;
退出mysql: exit
安装\关闭防火墙:
yum install firewalld
systemctl stop firewalld.service
打开本机的数据库,使用IP测试连接是否成功
主从配置
1、主库配置
进入虚拟机,编辑:vim /etc/my.cnf
在[mysqld]下面加添加如下代码
server-id=1 //每台MySQLid唯一
//二进制日志索引的配置
log-bin=master-bin
log-bin-index=master-bin.index
配置完成后重启MySQL,进入MySQL
因为从服务器需要来读取主服务器的二进制日志,所以需要创建用户指定权限
//创建用户:
create user slave;
grant replication slave on *.* to 'slave'@'172.18.34.14' identified by 'root';
grant replication slave on *.* to 'slave'@'172.18.34.16' identified by 'root';
//刷新
flush privileges;
//查看主库状态:
show master status;
2、从库配置
在第二台虚拟机进入 vim /etc/my.cnf 编辑
server-id=2 //
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
同样的重启MySQL,让后进入MySQL
配置从服务器的主从关系
change master to master_host='172.18.34.6', //主库的IP
master_port=3306,
master_user='slave', //之前主机设置的有复写权限的用户名
master_password='root',
master_log_file='master-bin.000001', //主机show master status;时的file名
master_log_pos=0; //开始位置。第一次从0开始
start slave; //开启从服务器
如果有更多的从服务器,只需将server-id设置为不同即可,其他操作相同
最后在主库创建一个测试数据库,在从库中可以查看到就代表配置成功。