MySQL数据库项目配置与解析

1、项目环境

1.1

(1)项目拓扑:

在这里插入图片描述

(2)环境描述

主机 操作系统 IP地址 主要软件
Master CentOS 7.3 x86_64 192.168.1.101 cmake-3.16.2.tar.gz、boost_1_59_0.tar.gz、mysql-5.7.28.tar.gz
Slave1 CentOS 7.3 x86_64 192.168.1.102 cmake-3.16.2.tar.gz、boost_1_59_0.tar.gz、mysql-5.7.28.tar.gz
Slave2 CentOS 7.3 x86_64 192.168.1.103 cmake-3.16.2.tar.gz、boost_1_59_0.tar.gz、mysql-5.7.28.tar.gz
Amoeba CentOS 7.3 x86_64 192.168.1.110 amoeba-mysql-binary-2.2.0.tar.gz、jdk-6u14-linux-x64.bin
客户端 CentOS 7.3 x86_64 192.168.1.111

2、任务需求

(1)实验环境如上图所示,使用VMWare Workstation搭建实验环境。
(2)配置MySQL主从复制,通过Amoeba实现MySQL数据库请求的读写分离。
(3)在主数据库中永久开启慢查询功能,并设置慢查询的阈值为5。
(4)在主数据库中创建总表,然后实现分表查询。
(5)创建数据库及表信息,实现每周进行完整备份,每天进行增量备份。

3、配置步骤

--------编译安装 MySQL-------------------

 Master、Slave1、Slave2、客户端 服务器上安装 MySQL 数据库。
yum -y install gcc gcc-c++ ncurses ncurses-devel bison libaio-devel cmake
tar zxvf mysql-5.7.17.tar.gz -C /opt/
tar zxvf boost_1_59_0.tar.gz -C /usr/local/
cd /usr/local/
mv boost_1_59_0 boost

cd mysql-5.7.17/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1

make && make install

useradd -M -s /sbin/nologin  mysql

vim /etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
socket=/usr/local/mysql/data/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
port = 3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=2048
character-set-server=utf8
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M


chown mysql:mysql /etc/my.cnf
chown -R mysql:mysql /usr/local/mysql

echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
source /etc/profile

cd /usr/local/mysql/bin/
mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
netstat -natp |grep 3306

mysqladmin -u root -p password "abc123"

mysql -u root –pabc123
grant all privileges on *.* to 'root'@'%' identified by 'abc123' with grant option;

-------mysql主从服务器时间同步-------------------

主服务器设置:192.168.1.101
yum install ntp -y

vim /etc/ntp.conf
server 127.127.1.0             
fudge 127.127.1.0 stratum 8    

service ntpd start

从服务器设置:192.168.1.102192.168.1.103
yum install ntp ntpdate -y

service ntpd start
/usr/sbin/ntpdate 192.168.1.101

--------mysql主服务器配置-------------------

vim /etc/my.cnf
server-id = 11
log-bin=mysql-bin     
log-slave-updates=true

systemctl restart mysqld

mysql -u root -pabc123
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.1.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
show master status;
//如显示以下
+-------------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysql-bin.000002|    339 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

--------mysql从服务器配置-------------------

vim /etc/my.cnf
server-id = 22
relay-log=relay-log-bin              
relay-log-index=slave-relay-bin.index

mysql -u root –pabc123
change master to master_host='192.168.1.101',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=339;
start slave;
show slave status\G;
//确保	Slave_IO_Running: Yes
Slave_SQL_Running: Yes

--------验证主从同步-------------------

主服务器上进入执行 create database db_test;
去从服务器上查看 show databases;

--------amoeba服务器配置-------------------

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

cp jdk-6u14-linux-x64.bin /usr/local/
./jdk-6u14-linux-x64.bin
//按yes,按enter

mv jdk1.6.0_14/ /usr/local/jdk1.6

vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile

mkdir /usr/local/amoeba
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
//如显示amoeba start|stop说明安装成功

在三台mysql服务器上添加权限开放给amoeba访问设置:
grant all on *.* to test@'192.168.80.%' identified by '123.com';

回到amoeba服务器配置amoeba服务:
cd /usr/local/amoeba/conf/
cp amoeba.xml amoeba.xml.bak
vim amoeba.xml
--30行--
 <property name="user">amoeba</property>
 --32行-- 
 <property name="password">123456</property>
 --115行--
 <property name="defaultPool">master</property>
 --117-去掉注释-
 <property name="writePool">master</property>
 <property name="readPool">slaves</property>

cp dbServers.xml dbServers.xml.bak
vim dbServers.xml
--23行注释掉  作用:默认进入test库 以防mysql中没有test库时,会报错
 <!-- <property name="schema">test</property> -->
 --26--29--去掉注释--
 <property name="user">test</property>
 <property name="password">123.com</property>
 -----42-主服务器地址---
<dbServer name="master"  parent="abstractServer">
<property name="ipAddress">192.168.126.129</property>
--52-从服务器主机名-
<dbServer name="slave1"  parent="abstractServer">
--55-从服务器1地址-
<property name="ipAddress">192.168.126.130</property>
--(这里上面6行复制)从服务器2地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.126.131</property>
--64行--
<dbServer name="slaves" virtual="true">
--70行--
<property name="poolNames">slave1,slave2</property>


/usr/local/amoeba/bin/amoeba start&
netstat -anpt | grep java					//查看8066端口

--------测试读写分离 -------------------

在客户端服务器上测试:
mysql -u amoeba -p123456 -h 192.168.1.110 -P8066		
//通过amoeba服务器代理访问mysql ,在通过客户端连接mysql后写入的数据只有主服务会记录,然后同步给从--从服务器

在主服务器上:
use db_test;
create table test (id int(10),name varchar(10),address varchar(20));

在两台从服务器上:
stop slave;     //关闭同步
use db_test;
//在slave1上:
insert into test values('1','zhangsan','this_is_slave1');

//在slave2上:
insert into test values('2','lisi','this_is_slave2');
//在主服务器上:
insert into test values('3','wangwu','this_is_master');

//在客户端服务器上:
use db_test;
select * from test;		//会分别向slave1和slave2读取数据,只有在两个从服务器上添加的数据,没有在主服务器上添加的数据,在两个从服务器上start slave; 即可实现同步

--------在主数据库中永久开启慢查询功能,并设置慢查询的阈值为5 -------------------

vim /etc/my.cnf
slow_query_log=ON
slow_query_log_file=mysql_slow_query.log
long_query_time=5

systemctl restart mysqld

--------在主数据库中创建总表,然后实现分表查询-------------------

mysql -uroot -pabc123
use db_test;
//创建分表user1
CREATE TABLE user1 (id int(11) NOT NULL AUTO_INCREMENT,name varchar(50) NOT NULL,sex char(2) NOT NULL,PRIMARY KEY (id)) ENGINE=MyISAM DEFAULT CHARSET=utf8;

//创建分表user2
create table user2 like user1;

//创建主表
CREATE TABLE alluser (id int(11) NOT NULL AUTO_INCREMENT,name varchar(50) NOT NULL,sex char(2) NOT NULL,PRIMARY KEY (id)) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=( 'user1', 'user2');
//使用Merge存储引擎实现MySQL分表查询,它就像是一个外壳,或者是连接池,数据存放在分表里面。所有表的结构必须一致。
// INSERT_METHOD=LAST;表示插入的方法,INSERT_METHOD的值可以是FIRST(插入第一个表),LAST(最后一个表),NO(不能插入)。
// UNION=(...)中加入分表。

//测试分表查询
insert into user1 values (1,'zhangsan', '男');
insert into user1 values (3,'zhangsan1', '男');
insert into user1 values (5,'zhangsan2', '男');

insert into user2 values (2,'lisi', '女');
insert into user2 values (4,'lisi1', '女');
insert into user2 values (6,'lisi2', '女');

select * from alluser;

--------创建数据库及表信息,实现每周进行完整备份,每天进行增量备份-------------------

mkdir /opt/allbackup
vim /opt/ alldb_backup.sh
#!/bin/bash
/usr/local/mysql/bin/mysqldump -uroot -pabc123 --all-databases > /opt/allbackup/all_$(date +%F).sql
find /opt/allbackup/ -name "all_*.sql" -mtime +30 -exec rm -rf {
    
    } \;

chmod 711 /opt/alldb_backup.sh

mkdir /opt/indb_bak
vim /opt/flush-logs.sh
#!/bin/bash
/usr/local/mysql/bin/mysqladmin -uroot -pabc123 flush-logs

chmod 711 /opt/flush-logs.sh

vim /opt/ indb_backup.sh
#!/bin/bash
find /usr/local/mysql/data/ -name "mysql-bin.0*" -mtime 1 -exec mv {
    
    } /opt/inbackup/mysql-bin.$(date -d "-1 day" +%F) \;
//查找前一天的二进制日志文件并移动文件

chmod 711 /opt/ indb_backup.sh

crontab -e
2 1 * * 0 /opt/alldb_backup.sh
2 2 * * * /opt/flush-logs.sh
2 3 * * * /opt/ indb_backup.sh

猜你喜欢

转载自blog.csdn.net/Gengchenchen/article/details/113848287
今日推荐