准备: 首先准备两台虚拟机 ,用来配置数据库 (可以参考 https://www.linuxidc.com/Linux/2018-04/151924.htm)
一些基本概念:
主从复制
是一种数据备份的方案。
简单来说,是使用两个或两个以上相同的数据库,将一个数据库当做主数据库,而另一个数据库当做从数据库。在主数据库中进行相应操作时,从数据库记录下所有主数据库的操作,使其二者一模一样。
读写分离
是一种让数据库更稳定的的使用数据库的方法。
是在有从数据库的情况下使用,当主数据库进行对数据的增删改也就是写操作时,将查询的任务交给从数据库。
为什么要使用主从分离和读写操作呢?
主从复制:1、当主数据库出现问题时,可以当从数据库代替主数据库,可以避免数据的丢失。
2、可以进行读写分离
读写分离:1、避免从数据库进行写操作而导致的主从数据库数据不一致的情况,因为当主从数据库数据不一致时,那么从数据库最主要的备份任务就没有意义了。
2、减轻主数据库的压力。因为进行写操作更耗时,所以如果不进行读写分离的话,写操作将会影响到读操作的效率。
安装mysql:
- 种yum源 , 用yum 的方式安装 mariadb
sudo vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl =http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
- 通过yum安装mariadb软件,安装mariadb服务端和客户端
sudo yum -y install MariaDB-client MariaDB-server MariaDB-devel
3.启动mysql 服务
service mysql start ------- 启动服务
chkconfig mysql on --------开机启动
配置MariaDB,键入命令
mysql_secure_installation
初始密码是空,直接按回车即可,然后输出新密码,重新确认新密码,之后关于安全设置。远程操作等一路回车即可。这样你的MariaDB便初始化完成了,下面测试登录吧
- 端口访问不到的问题,解决方法
vi /etc/sysconfig/iptables
# 添加 ****
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
注意:增加的开放3306端口的语句一定要在icmp-host-prohibited之前
保存并退出编辑,重启防火墙服务
service iptables restart
4 . 远程连接mysql时,提示“is not allowed to connect to this MySQL server”的解决方法
查看 mysql 的user 表 : select User,Host ,password from user;
create user root
@%
identified by '你的密码 ';
flush privileges;
主从复制开始
- 配置从库服务器
关闭mysql服务
service mysql stop
编辑配置文件 vi /etc/my.cnf.d/server.cnf
找到[mysqld], 在下方添加一行
server_id=2
保存后启动mysql服务
service mysql start
配置主服务器
编辑配置文件 vi /etc/my.conf.d/server.cnf
找到[mysqld], 在下方添加如下配置, webdb为需要同步的数据库名, 可以添加多个, 逗号分隔
log-basename=master
log-bin=mysql-bin
binlog-format=row
binlog-do-db=webdb
server_id=1
重启mysql
service mysql restart
登入mysql, 创建用于同步数据库的用户
以root登入mysql, 此命令后需输入密码
mysql -u root -p
CREATE USER ‘slave_user’@‘192.168.56.14’ IDENTIFIED BY ‘你的密码’; #创建用户,ip应为从库ip —(192.168.21.59是你从数据库的ip)
GRANT REPLICATION SLAVE ON . TO slave_user@‘192.168.56.14’ identified by ‘你的密码’;
#授权FLUSH PRIVILEGES;
查看并记录主库状态, 停机,打包数据,传到从库服务器
进入mysql命令行 mysql -u root -p
运行以下命令, 并记录显示的File和Position, 下步需要用
RESET MASTER;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
关闭mysql服务 service mysql stop
打包mysql数据文件 tar cvf mysql_data.tar /var/lib/mysql/
使用scp或其他方式传输到从库服务器 scp mysql_data.tar root@192.168.56.14:/home/
配置从库
确认mysql服务已关闭 service mysql stop
将主库的数据库文件覆盖到/usr/lib/mysql/
tar xvf mysql_data.tar -C /
启动mysql service mysql start
设置从库,登入myql命令行后,执行如下操作
停掉slave服务 stop slave;
修改配置, 注意MASTER_LOG_FILE和MASTER_LOG_POS修改为上一步SHOW MASTER STATUS中的File和Position
CHANGE MASTER TO MASTER_HOST=‘192.168.56.12’, MASTER_USER=‘slave_user’, MASTER_PASSWORD=‘cds-ucenter’ ,MASTER_PORT=3306, MASTER_LOG_FILE=‘mysql-bin.000005’, MASTER_LOG_POS=669, MASTER_CONNECT_RETRY=10;
开启slave服务 start slave;
查看从库的状态 show slave status \G;
最后配置成功,发现主从没有生效,原来是忽略这句话 :找到[mysqld], 在下方添加如下配置, webdb为需要同步的数据库名, 可以添加多个, 逗号分隔
主服务器查看从服务器状态 :show slave hosts; 查看主服务器状态 : SHOW MASTER STATUS;
读写分离
1.2)Linux 使用Mycat实现读写分离
- 首先要配置java 环境,Mycat需要java 环境 ,下载linux版的jdk, 建议1.8版本以上
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
然后上传的虚拟机 /usr/local 下面
2. 解压、配置环境变量
tar -zxvf 你的安装包
#改名成java
mv 你的包名 java
配置环境变量
下载mycat 安装包:
http://www.mycat.org.cn/,我这里下载的是 Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz
# 解压
tar -zxvf Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz
# 创建专门运行mycat账号
adduser mycat
# 切换到mycat文件夹路径下
cd /usr/local
# 将文件权限赋给mycat账号
chown mycat:mycat -R mycat
#配置环境变量并添加 export JAVA_HOME=/usr export MYCAT_HOME=/usr/local/mycat
vim /etc/profile
读写分离的配置
mycat 目录结构
下面进入conf ,进行配置文件设置:
配置 schema.xml 文件
vi schema.xml
连接信息配置
vim server.xml
#到bin路径下 :
cd /usr/local/mycat/bin
#启动
./mycat restart