Mysql主从与读写 - smile0821/learngit GitHub Wiki
Master:192.168.1.123
Slave:192.168.1.456
##设置主从和读写分离需要注意
1. 主从服务器操作系统版本和位数一致
2. 主从的数据库版本要一致
3. 主从数据库中的数据需一致
4. 主服务器开启二进制日志,主从的server_id在局域网内必须唯一
##操作步骤
目录准备:
cd /
mkdir u01
cd u01
mkdir mysql
cd mysql
mkdir data
mkdir log
Master&Slave:
l. 将mysql二进制包传至/u01/mysql下,解压
\#tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
2. 复制解压后的文件至/usr/local/mysql
mv ./mysql-5.7.18/ /usr/local/mysql/
3. 创建mysql用户及用户组
\#groupadd mysql
\#useradd -g mysql -d /usr/local/mysql mysql
4. 进入/u01/mysql,更改所属的组和用户为mysql
cd /u01/mysql
chown -R mysql:mysql ./
5. 修改/etc/my.cnf中的basedir、datadir等路径(记得做一次备份,写错了还能还原回去)
6. 用户root用户进行初始化
./mysqld —user=mysql —basedir=/usr/local/mysql —datadir=/u01/mysql/data —initialize
7. 用安全模式启动并修改root密码
./mysqld_safe —skip-grant-tables &
./mysql -uroot
mysql>use mysql
mysql>update user set authentication_string=password(“testwy”) where user=‘root’;
mysql>flush privileges;
mysql>quit
8. 重新启动mysql并修改密码
pkill mysql
./mysqld_safe &
alter user user() identified by ‘testwy’;
9. 将数据分别拷贝至Master&Slave
9.1 Master/Slave创建需要的database
create database titan_mo default character set utf8 collate utf8_general_ci;
9.2 在该database中建好所有的表
use titan_mo;
create table xxx();
9.3 把Master/Slave的mysql停掉
pkill mysql
9.4 在要拷贝数据的机器上,把对应数据库data目录下所有的(.ibd)文件拷贝到Master/Slave的临时目录下
scp /u01/mysql-data/titan_mo/.ibd 192.168.1.224:/home/bak_data/
9.5 机器b上的数据库配置文件添加一行innodb_force_recovery=1,如果启动不成功可修改为2,3,4,5,6
9.6 启动Master/Slave上的mysql,废弃数据库的表空间
./mysqld_safe &
mysql -uroot -p
mysql>use titan_mo
mysql>alter table xxx discard tablespace;
9.7 将拷贝来的数据放到Master/Slave对应数据库的文件夹下,修改用户及用户组
cp /home/bak_data/.ibd /home/mysql/data/titan_mo/
cd /home/mysql/data/titan_mo/
chgrp mysql ./*
chown mysql ./*
9.8 恢复Master/Slave上的表空间
mysql>alter table xxx import tablespace;
验证是否成功恢复表空间
mysql>select * from xxx limit 10;
9.9 Master/Slave上的数据库配置文件中的innodb_force_recovery=1注释掉,启动mysql
9.10 分别在主从上创建titantest用户,用于读写分离
mysql>grant all on titan_mo.* to ’titantest’@’%’ identified by ‘w123456’;
mysql>flush privileges;
10. 配置主从
10.1 Master服务器配置
① my.cnf文件
server-id=xxx
在[mysqld]段下添加:
binlog-do-db=titan_mo
binlog-ignore-db=mysql
log-bin=mysql-bin
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
② 启动mysql,创建数据同步用户,并授权相应权限
mysql>grant file on . to ’slaveuser224’@’10.22.98.224’ identified by ‘w123456’;
mysql>grant replication slave,replication client on . to ’slaveuser224’@’10.22.98.224’ identified by ‘w123456’;
mysql>flush privileges;
mysql>show master status;
记录Master的position:154
10.2 Slave服务器配置
① my.cnf文件
server-id=yyy
log-bin = slave-mysql-bin
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=test-mysql-relay-bin
log_slave_updates=1
read_only=1
② 启动mysql,配置Slave复制
mysql>change master to master_host=‘10.22.98.237’,master_port=3306,master_user=‘slaveuser’,master_password=‘w123456’,master_log_file=‘master-bin_1001.000023’;
mysql>start slave;
mysql>show slave status;
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
11. 配置读写分离
11.1 安装mycat
① Java安装
mycat是java开发的,所以需要先安装Java,版本在1.7以上
tar -zxvf jdk-1.8.xxx.tar.gz
mv ./jdk-1.8.xxx/ /usr/local/java/jdk1.8.0
vi /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source /etc/profile
java -version
② 解压mycat
tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz
mv ./Mycat-server-1.4/ /usr/local/mycat/
11.2 shema.xml文件配置
cd /usr/local/mycat/bin
./mycat console
12. 启动项目进行读写分离
12.1 修改application.properties文件中连接数据库处
spring.datasource.url=jdbc:mysql://10.22.98.237:8066/TESTMO?useUnicode=true&characterEncoding=utf-8&useSSL=false&useAffectedRows=true&allowMultiQueries=true&rewriteBatchedStatements=true
spring.datasource.username=wrUser
spring.datasource.password=w123456
12.2 启动项目
查看是否能成功连接,如果不能,在防火墙中打开8066和9066端口
vi /etc/sysconfig/iptables
MyCat -A INPUT -m state —state NEW -m tcp -p tcp —dport 8066 -j ACCEPT -A INPUT -m state —state NEW -m tcp -p tcp —dport 9066 -j ACCEPT
重启防火墙
grant insert,delete,update,drop,select on titan_publicbasicdata.b_p_au to ’titan’@’%’ identified by ‘test123’;
grant select on titan_publicbasicdata.* to ’titan_test’@’%’ identified by ‘test123’;