温馨提示:大概需要半小时到一小时安装成功。
目录
1、Master库搭建(主库搭建和从库搭建一毛一样)
2、Slave库搭建(参考主库搭建 ↑)
3、绑定主从关系(这一步主要是修改一些配置文件)
1.初始化一个SpringBoot工程,并添加Sharding-jdbc依赖
提示:随着项目数据量的增大,我们不得不开始考虑主从复制和读写分离。
一、主从复制搭建
1、Master库搭建(主库搭建和从库搭建一毛一样)
这里我只准备了一台服务器进行搭建测试,遂主库和从库均在一台服务器上,只不过是访问端口不一样而已
第一步:检查用户组
-
cat /etc/group | grep mysql
-
cat /etc/passwd |grep mysql
-
#没有任何输出,说明没有则创建该用户组
-
#若存在mysql用户组,可以执行删除指令
-
userdel mysql
-
#创建用户组
-
groupadd mysql
-
useradd -r -g mysql mysql
第二步:下载mysql包
-
这边提供了永久网盘资源,失效评论区找我,我会第一时间提供。
-
我们下面的安装均使用该版本进行安装。
-
链接:https://pan.baidu.com/s/1nlCjsIPmKH3PQhU8g9MVGw
-
提取码:3mcg
使用xftp软件上传至服务器
-
#解压
-
tar xzvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
第三步:创建存储数据目录并赋权
-
mkdir /usr/local/mysql/data
-
chown -R mysql:mysql /usr/local/mysql
-
chmod -R 755 /usr/local/mysql
目录切换到/home/mysql下,所有解压文件移动到usr/local/mysql下面
mv mysql-5.7.24-linux-glibc2.12-x86_64 /usr/local/mysql
第四步 编辑my.cnf,做一些简单配置
-
basedir=/usr/local/mysql/mysql-5.7.24-linux-glibc2.12-x86_64
-
socket=/var/lib/mysql/mysql.sock
-
# Disabling symbolic-links is recommended to prevent assorted security risks
-
symbolic-links=0
-
log-error=/var/log/mysqld.log
-
pid-file=/var/run/mysqld/mysqld.pid
-
#跳过密码验证
-
skip-grant-tables
-
server-id=2
-
log-bin=mysql-bin
-
[mysqld]
-
datadir=/usr/local/mysql/data
-
port = 3306
-
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
-
symbolic-links=0
-
max_connections=400
-
innodb_file_per_table=1
-
#表名大小写不明感,敏感为
-
lower_case_table_names=1
第五步启动服务
-
/usr/local/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/support-files/mysql.server start
-
#执行该命令,可能会报如下错误,大多是由于权限问题,找到mysql的文件进行赋权即可(不报错直接命令行登录测试,然后跳到第六步)
-
[root@VM-0-10-centos mysql]# /usr/local/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/support-files/mysql.server start
-
Starting MySQL............ ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid).
这边我们提供一个解决方案的链接: 解決方案鏈接
还可能会出现:
-
#还可能会出现
-
Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) ";
这边提供另一个解决方案: 解决方案链接
重启服务:
-
[root@VM-0-10-centos bin]# /usr/local/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/support-files/mysql.server start
-
Starting MySQL SUCCESS!
-
#测试下命令行登录
-
[root@VM-0-10-centos bin]# mysql -u root -p
-
Enter password:
-
#到这一步直接回车,不比输入密码,因为刚才已经跳过密码验证了
-
MySQL [(none)]> exit;
-
Bye
-
[root@VM-0-10-centos bin]#
第五步添加软连接,方便重启
-
ln -s /usr/local/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/bin/mysql /usr/bin/mysql
-
ln -s /usr/local/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/bin/mysql /usr/bin/mysql
-
#添加完软连接就可以在任意目录下愉快地重启了
-
[root@VM-0-10-centos bin]# service mysql restart
-
Shutting down MySQL.... SUCCESS!
-
Starting MySQL.......... SUCCESS!
第七步:登录mysql,修改密码
-
#编辑my.cnf
-
vim /etc/my.cnf
-
#注释掉
-
#skip-grant-tables
-
#重启mysql
-
service mysql restart
-
mysql -u root -p
-
mysql> use mysql;#使用数据库
-
mysql> set password for root@localhost = password('mysql123');#修改数据库密码为mysql123
-
mysql> update user set user.Host='%' where user.User='root';#开放远程连接
-
mysql>flush privileges;
第七步:设置开机启动
-
1、将服务文件拷贝到init.d下,并重命名为mysql
-
[root@localhost /]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
-
2、赋予可执行权限
-
[root@localhost /]# chmod +x /etc/init.d/mysqld
-
3、添加服务
-
[root@localhost /]# chkconfig --add mysqld
验证navicat远程连接
2、Slave库搭建(参考主库搭建 ↑ )
3、绑定主从关系(这一步主要是修改一些配置文件)
(1)开启master的二进制日志
①配置my.cnf配置文件
vi /etc/my.cnf
②添加二进制日志配置,开启二进制(mysql-bin只是二进制日志名称,可以自行指定)
-
server-id=1 #id是一定要指定的,是唯一的标识(master数据库要比slave数据库的id优先级高才行)
-
log-bin=mysql-bin #开启二进制日志
③授权 :登录数据库,需要给slave数据库配置一个用户/密码的权限
(允许某个ip地址的某个用户以某个密码对当前数据库的所有库和表进行复制操作配置之后需要刷新权限)
mysql> grant replication slave on *.* to 'root'@'slave数据库ip' identified by '密码';
mysql> flush privileges;
④修改完重启服务,查询master状态
[root@VM_0_10_centos ~]# service mysqld restart
登录数据库,查询master状态,如下图所示:
mysql> show master status;
file:是日志文件名称
position:日志所在位置
(2) 开启slave的二进制日志
①修改my.cnf
vi /etc/my.cnf
添加slave二进制日志配置,开启二进制(mysql-bin只是二进制日志名称,可以自行指定)
-
server-id=2
-
log-bin=mysql-bin
注意:每一台指定唯一的一个server-id标识
修改完配置服务需重启服务
[root@VM_0_16_centos ~]# service mysqld restart
②配置slave指向master,登录数据库
-
mysql> change master to master_host='10.0.33.18',master_port=3306,master_user='root',master_password='mysql123',master_log_file='mysql-bin.000002',master_log_pos=154;
-
mysql>flush privileges;
-
mysql>start slave;
-
mysql> show slave status\G;
-
*************************** 1. row ***************************
-
Slave_IO_State:
-
Master_Host: 10.0.3x.xx
-
Master_User: root
-
Master_Port: 3306
-
Connect_Retry: 60
-
Master_Log_File: mysql-bin.000002
-
Read_Master_Log_Pos: 154
-
Relay_Log_File: localhost-relay-bin.000002
-
Relay_Log_Pos: 4
-
Relay_Master_Log_File: mysql-bin.000002
-
Slave_IO_Running: YES
-
Slave_SQL_Running: YES
-
Replicate_Do_DB:
-
Replicate_Ignore_DB:
-
Replicate_Do_Table:
-
Replicate_Ignore_Table:
-
Replicate_Wild_Do_Table:
-
Replicate_Wild_Ignore_Table:
-
Last_Errno: 0
-
Last_Error:
-
Skip_Counter: 0
-
Exec_Master_Log_Pos: 154
-
Relay_Log_Space: 154
-
Until_Condition: None
-
Until_Log_File:
-
Until_Log_Pos: 0
-
Master_SSL_Allowed: No
-
Master_SSL_CA_File:
-
Master_SSL_CA_Path:
-
Master_SSL_Cert:
-
Master_SSL_Cipher:
-
Master_SSL_Key:
-
Seconds_Behind_Master: NULL
-
Master_SSL_Verify_Server_Cert: No
-
Last_IO_Errno: 2003
-
Last_IO_Error: error connecting to master 'root@10.0.33.18:3306' - retry-time: 60 retries: 9
-
Last_SQL_Errno: 0
-
Last_SQL_Error:
-
Replicate_Ignore_Server_Ids:
-
Master_Server_Id: 0
-
Master_UUID:
-
Master_Info_File: /usr/local/mysql/data/master.info
-
SQL_Delay: 0
-
SQL_Remaining_Delay: NULL
-
Slave_SQL_Running_State:
-
Master_Retry_Count: 86400
-
Master_Bind:
-
Last_IO_Error_Timestamp: 210419 15:17:11
-
Last_SQL_Error_Timestamp:
-
Master_SSL_Crl:
-
Master_SSL_Crlpath:
-
Retrieved_Gtid_Set:
-
Executed_Gtid_Set:
-
Auto_Position: 0
-
Replicate_Rewrite_DB:
-
Channel_Name:
-
Master_TLS_Version:
-
1 row in set (0.00 sec)
主要看这俩进程是否YES:
OK,主从复制配置文件到此修改完成。
提示:若主从挂调,可以优先在这里查看报错信息。
4、测试主从复制效果
二、读写分离配置
1.初始化一个SpringBoot工程,并添加Sharding-jdbc依赖
数据源配置代码如下:
-
sharding.jdbc.datasource.names=master,slave
-
# 主数据源
-
sharding.jdbc.datasource.master.type=com.alibaba.druid.pool.DruidDataSource
-
sharding.jdbc.datasource.master.driver-class-name=com.mysql.jdbc.Driver
-
sharding.jdbc.datasource.master.url=jdbc:mysql://10.0.33.18:3308/sharding?useUnicode=true&characterEncoding=utf-8&useSSL=false
-
sharding.jdbc.datasource.master.username=root
-
sharding.jdbc.datasource.master.password=mysql123
-
# 从数据源
-
sharding.jdbc.datasource.slave.type=com.alibaba.druid.pool.DruidDataSource
-
sharding.jdbc.datasource.slave.driver-class-name=com.mysql.jdbc.Driver
-
sharding.jdbc.datasource.slave.url=jdbc:mysql://10.0.33.19:3306/sharding?useUnicode=true&characterEncoding=utf-8&useSSL=false
-
sharding.jdbc.datasource.slave.username=root
-
sharding.jdbc.datasource.slave.password=mysql123
-
# 读写分离配置
-
sharding.jdbc.config.masterslave.load-balance-algorithm-type=round_robin
-
sharding.jdbc.config.masterslave.name=dataSource
-
sharding.jdbc.config.masterslave.master-data-source-name=master
-
sharding.jdbc.config.masterslave.slave-data-source-names=slave
2.测试读写分离效果
如下,在mysql-master 容器中,查看sql日志,可以看到插入的sql在主数据库执行:
如下,查看mysql-slave的sql日志,读取列表数据再从数据库执行,说明我们配置的读写分离是成功的。
原文链接:
http://www.cnblogs.com/dk1024/p/14703463.html