基于Ubuntu搭建Mysql5.7(主备)
最近在工作中要求在客户的系统中使用源码编译的方式搭建一个高可用的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 statusG; *************************** 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
感谢两位博主的文章,小白受益匪浅!!
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 基于Ubuntu搭建Mysql5.7(主备)