基于Ubuntu搭建Mysql5.7(主备)

   日期:2020-07-12     浏览:144    评论:0    
核心提示:最近在工作中要求在客户的系统中使用源码编译的方式搭建一个高可用的Mysql5.7数据库,客户提供的Linux系统为国产uos,其实用起来个人感觉和Unbuntu很像,ps:也没用过其他的,太菜太菜!经过一波三折,各种踩坑,总算在百度和google两位大神的指导下安装成功!下面进行记录。一、安装单节点Mysql5.71 安装必要的依赖(仅限于我的安装环境)首先去mysql官网下载安装包,我用的是mysql-boost-5.7.30.tar.gz进入到机器后,发现是可以连接外网的,这给我安装过程带来很

最近在工作中要求在客户的系统中使用源码编译的方式搭建一个高可用的Mysql5.7数据库,客户提供的Linux系统为国产uos,其实用起来个人感觉和Unbuntu很像,ps:也没用过其他的,太菜太菜!
经过一波三折,各种踩坑,总算在百度和google两位大神的指导下安装成功!下面进行记录。

一、安装单节点Mysql5.7

1 安装必要的依赖(仅限于我的安装环境)

首先去mysql官网下载安装包,我用的是mysql-boost-5.7.30.tar.gz
进入到机器后,发现是可以连接外网的,这给我安装过程带来很大的方便
首先我安装了gcc7.3版本(后续会写出gcc安装过程和踩坑记录)
安装的第一步,先使用apt命令下载以下依赖

						sudo apt-get install dos2unix
						sudo apt-get install chkconfig -y
						sudo apt-get install openssl
						sudo apt-get install libssl1.1=1.1.0j-1~deb9u1
						sudo apt-get install libssl-dev
						sudo apt-get install pkg-config
						sudo apt-get install cmake
						sudo apt-get install libtinfo5=6.0+20161126-1+deb9u2
						sudo apt-get install libncurses5=6.0+20161126-1+deb9u2
						sudo apt-get install libtinfo-dev=6.0+20161126-1+deb9u2
						sudo apt-get install libncurses5-dev

注意 安装openssl和libssl-dev可能会把ssh卸载,需要在安装完mysql后重新安装ssh
具体为什么要提前安装这些依赖,我会在后面踩坑记录中说明

2 准备安装包

我把安装包放在/usr/local/mysql下
安装目录为/var/mysql

解压mysql-boost-5.7.30.tar.gz

tar -zxvf mysql-boost-5.7.30.tar.gz

3 开始安装

进入安装包目录

cd /usr/local/mysql/mysql-5.7.30

创建cmake.sh文件
文件内容如下,其中,“DWITH_BOOST”的取值请根据实际的boost路径修改。

cmake . -DCMAKE_INSTALL_PREFIX=/var/mysql \   #安装目录
-DMYSQL_DATADIR=/data/mysql \  #数据目录
-DSYSCONFDIR=/etc/mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/mysql/mysql-5.7.30/boost/boost_1_59_0/boost

如果脚本执行不了使用dos2unix转换格式

dos2unix cmake.sh

给脚本执行权限

chmod +x cmake.sh

执行脚本

./cmake.sh

这一步如果依赖不全,大概率会报错,错误类型和我的解决方式见后文中踩坑记录
报错后,记得先删除缓存文件,解决错误后重新执行脚本

rm CmakeCache.txt

编译

make -j8(根据你机器核数)

安装

make install

执行完此步如果没有报错,可以说Mysql5.7安装完成了,接下来开始配置

3 配置

添加用户

groupadd mysql
useradd -g mysql mysql
chown -R mysql:mysql /var/mysql

创建日志目录 运行目录

mkdir -p /data/log  /data/run

初始化密码

cd /var/mysql
bin/mysqld --initialize --basedir=/var/mysql --datadir=/data/mysql --user=mysql

注意!!!!此处会生成一个随机密码,一定记下来

创建日志和pid文件

touch /data/log/mysql.log
touch /data/run/mysql.pid
chown -R mysql:mysql /data

建立软链接

ln -s /var/mysql/bin/mysql /usr/bin

拷贝启动文件

cp /var/mysql/support-files/mysql.server /etc/init.d/mysql

进入安装目录

./mysqld

最后一步 安装后可能会出现键位错乱和云主机无法通过ssh连接
安装以下两个依赖就好
具体为什么我也不大懂,毕竟还是个小白

sudo apt install ncurses-base
sudo apt-get install ssh

二、安装单节点过程中遇到的坑

1 gcc版本问题

一定要保证gcc的版本和libstdc++.so的位置

2.openssl依赖问题

在执行./cmake.sh的时候,如果依赖不全,会报错。
报错信息如下图

解决方式是安装openssl和libssl-dev

sudo apt-get install openssl
sudo apt-get install libssl1.1=1.1.0j-1~deb9u1
sudo apt-get install libssl-dev

3 pkg-config依赖问题


这个就很简单了,报错信息中已经给出了提示

apt-get install pkg-config

4 libncurses5-dev依赖问题


说实话这个报错我也很蒙,但是按照提示来,一个一个依赖的下载吧

sudo apt-get install libtinfo5=6.0+20161126-1+deb9u2
sudo apt-get install libncurses5=6.0+20161126-1+deb9u2
sudo apt-get install libtinfo-dev=6.0+20161126-1+deb9u2
sudo apt-get install libncurses5-dev

三、配置主从

首先我把创建好的一台mysql做了镜像,然后用镜像又建出来了一台机器,省时省力嘿嘿
然后开始配置,刚开始就遇到一个问题,我去/etc目录下,找不到my.cnf,这让我着实犯难。
好在秉着面试造火箭,工作靠百度的理念,各种查,已经有前辈帮我踩过这个坑了:
安装版本为mysql5.7 安装完成后发现在/etc目录下没有my.cnf
官网说:从5.7.18开始不在二进制包中提供my-default.cnf文件。
参考:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
经过测试,在5.7.18版本中,使用tar.gz安装时,也就是压缩包解压出来安装这种,已经不再需要my.cnf文件也能正常运行。
my.cnf文件就是把在命令行上启动MySQL时后面的参数用cnf文件配置好,那么下载启动时就不再需要在命令上加如参数。
这个my.cnf文件可以是自定义位置,也可以使用如下默认的位置,只要放在默认位置,MySQL自动识别(通过deb或者APT源安装的,初始位置在下方列表):

文件名 目的
/etc/my.cnf 全局选项
/etc/mysql/my.cnf 全局选项
$MYSQL_HOME/my.cnf 服务器特定选项(仅限服务器)
SYSCONFDIR/my.cnf 全局选项
defaults-extra-file 指定的文件 --defaults-extra-file,如果有的话
~/.my.cnf 用户特定选项
~/.mylogin.cnf 用户特定的登录路径选项(仅限客户端)

以上的详细说明可以参考官方解释:https://dev.mysql.com/doc/refman/5.7/en/option-files.html

下面开始进行主从配置

1 准备工作

1.主从数据库版本最好一致
2.主从数据库内数据保持一致
主数据库:182.92.172.80 /linux
从数据库:123.57.44.85 /linux

2 主数据库master修改

修改mysql配置
找到主数据库的配置文件my.cnf(没有的话就新建一个)

[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id

重启mysql,创建用于同步的用户账号
打开mysql会话

mysql -uroot -p

创建用户并授权:用户:rel1密码:slavepass

mysql> CREATE USER 'repl'@'123.57.44.85' IDENTIFIED BY 'slavepass';#创建用户

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'123.57.44.85';#分配权限

mysql>flush privileges;   #刷新权限

查看master状态,记录二进制文件名

mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+

3 从服务器slave修改

修改mysql配置
同样找到my.cnf文件,添加server-id

[mysqld]
server-id=2 #设置server-id,必须唯一

重启mysql,打开mysql绘画,执行同步sql语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='182.92.172.80',
    ->     MASTER_USER='rep1',
    ->     MASTER_PASSWORD='slavepass',
    ->     MASTER_LOG_FILE='mysql-bin.000003',
    ->     MASTER_LOG_POS=73;

启动slave同步进程

mysql>start slave;

查看slave状态:

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 182.92.172.80
                  Master_User: rep1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000013
          Read_Master_Log_Pos: 11662
               Relay_Log_File: mysqld-relay-bin.000022
                Relay_Log_Pos: 11765
        Relay_Master_Log_File: mysql-bin.000013
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
        ...

当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。接下来就可以进行一些验证了,比如在主master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可以完成主从复制功能的验证了。

master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:

binlog-ignore-db = mysql  
binlog-ignore-db = test  
binlog-ignore-db = information_schema  
  
# 只同步哪些数据库,除此之外,其他不同步  
binlog-do-db = game

踩坑
如果从数据库是通过主数据库镜像创建而来,记得在数据目录下(/data/mysql),修改auto.cnf中server_uuid 否则主从会不识别两个mysql

参考博文
1.https://www.cnblogs.com/lelehellow/p/9633315.html
2.https://www.cnblogs.com/EasonJim/p/7158466.html

感谢两位博主的文章,小白受益匪浅!!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服