mariaDB是开源的数据库,是mysql的衍生版。mysql
Mariadb官方: https://mariadb.com/ web
os:centos7sql
mariadb:10.3数据库
yum安装实现。vim
一个版本mysql经过多个端口实现centos
规划3个实例的端口:3306/3307/3308。缓存
将各自的配置文件、日志文件、pid、socket单独存放。bash
1、yum安装app
采用 yum安装,centos7默认的yum源是mariadb5.5版本,因此须要修改yum仓库配置文件,以安装10.3.0版本的mariadb
ssh
vim /etc/yum.repos.d/CentOS-Base.repo
在仓库配置文件中添加以下行
# MariaDB 10.3 CentOS repository list - created 2019-01-07 01:34 UTC # [mariadb] name = MariaDB baseurl = gpgkey= gpgcheck=1
完成后,更新yum缓存,而后检查maradb是否已经更换
yum info MariaDB-server
确认后,便可使用yum进行安装
yum install MariaDB-server
2、配置
三个数据库实例都放在独立的目录中
mkdir -pv /data/{3306,3307,3308}/{etc,socket,pid,log,data}
完成后的目录结构以下所示:
确认mysql的用户帐户是否已经被建立
getent passwd mysql
修改数据库的权限和组信息
chown -R mysql.mysql /data
生成各个实例数据库文件
mysql_install_db --datadir=/data/3306/data --user=mysql --basedir=/usr mysql_install_db --datadir=/data/3307/data --user=mysql --basedir=/usr mysql_install_db --datadir=/data/3308/data --user=mysql --basedir=/usr
根据3个不一样的实例准备3个配置文件,用/etc/my.cnf 当模板:
将配置文件考到各自的文件下:
cp /etc/my.cnf /data/3306/etc/ cp /etc/my.cnf /data/3307/etc/ cp /etc/my.cnf /data/3308/etc/
修改各自实例的配置文件,以下所示:
vim /data/3306/etc/my.cnf
[mysqld] port=3306 #手动添加部分 datadir=/data/3306/data socket=/data/3306/socket/mysql.sock [mysqld_safe] log-error=/data/3306/log/mariadb.log pid-file=/data/3306/pid/mariadb.pid #!includedir /etc/my.cnf.d #须要注释掉
其余实例3307,3308的配置文件也按上修改
注意,配置文件中,能够有不少优化,能够查询资料后制定
3、准备启动脚本
首先确认中止mariadb服务
systemctl stop mariadb
在/data/3306/路径下建立mysql启动脚本,脚本内容以下:
touch /data/3306/mysql vim /data/3306/mysql #!/bin/bash port=3306 #设定实例端口号 mysql_user="root" mysql_pwd="abc@123" #设定数据库密码 cmd_path="/usr/bin" mysql_basedir="/data" mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock" function_start_mysql() { if [ ! -e "$mysql_sock" ];then printf "Starting MySQL...\n" ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null & else printf "MySQL is running...\n" exit fi } function_stop_mysql() { if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped...\n" exit else printf "Stoping MySQL...\n" ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown fi } function_restart_mysql() { printf "Restarting MySQL...\n" function_stop_mysql sleep 2 function_start_mysql } case $1 in start) function_start_mysql ;; stop) function_stop_mysql ;; restart) function_restart_mysql ;; *) printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n" esac
完成后的目录结构以下:
注意修改3307,3308各个实例的脚本
cp /data/3306/mysqld /data/3307/(配置文件端口改成port=3307) cp /data/3306/mysqld /data/3308/(配置文件端口改成port=3308)
设置合适的权限
chmod 700 /data/3306/mysqld chmod 700 /data/3307/mysqld chmod 700 /data/3308/mysqld
启动脚本
./ mysqld start
检查服务启动状态
可见 各个端口都是正常开启
测试链接
须要用sock指定文件连接到 mysql
mysql -S /data/3306/socket/mysql.sock mysql -S /data/3307/socket/mysql.sock mysql -S /data/3308/socket/mysql.sock
经过查看端口判断进入哪一个实例
show variables like 'port';
设置密码
mysqladmin -uroot -S /data/3306/socket/mysql.sock password 'abc@123'
此时进入3306实例数据库
mysql -S /data/3306/socket/mysql.sock -u root -p
4、主从复制
主从复制是一个异步的复制过程,数据从一个Mysql数据库复制到另外一个mysql数据库,在主和从之间实现整个主从复制使的过程是由三个线程参与完成的。
其中有两个线程在从端,另一个线程在主端。
要实现主从复制,首先必须打开master端的binlog记录功能,不然没法实现。整个主从复制过程就是从端从主端获取binlog日志,而后再到slave上以相同的顺序获取binlog日志中所记录的各类
SQL操做。
要打开binlog记录功能,可经过配置文件my.cnf中的mysqld模块增长log-bin参数选项来实现。
主从复制原理
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将获得的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操做,来实现主从的操做一致,而最终数据一致;
主从复制重点:
1)主从复制是异步的逻辑的sql语句级的复制
2)复制时,主库有一个I/O线程,从库有有两个线程,即I/O和SQL线程。
3)实现主从复制的必要条件是主库须要开启binlog功能
4)做为复制的全部mysql节点的server-id都不能相同
5)binlog文件只记录对数据库有更改的sql语句,不记录任何查询语句。
以本机单机数据库多实例环境测试主从复制
主库于从库IP信息以下:
主库 3306
从库1 3307
从库2 3308
4.1设置server-id值并开启binlog功能参数
修改主库配置文件my.cnf,按照以下修改两个参数
vim /data/etc/my.cnf [mysqld] server-id =1 #用于同步的每台机器或者实例server-id都不能相同 log-bin = /data/3306/mysql-bin #注意,只须要主库设置便可,从库不须要设置此参数
说明:
参数要放在my.cnf的[mysqld]模块下
server-id的值不能相同
参数不能重复
修改完成后重启数据库
/data/3306/mysql restart
登录数据库,检查参数的更改状况,以下:
mysql -S /data/3306/socket/mysql.sock -u root -pabc@123 show variables like 'server_id'; show variables like 'log_bin';
按照这个方法检查其余实例数据库
4.2主库创建用于主从复制的帐号
从库想要和主库同步,必须有一个能够链接主库的帐号,而且这个帐号是主库上建立的,权限是运行主库链接并同步数据库。
登录主库后,创建用于从库复制的帐号rep
grant replication slave on *.* to 'rep'@'172.31.208.%' identified by 'abc@123'; flush privileges;
检查主库rep帐号
4.3实现对主数据库锁表只读
对主数据库锁表只读
flush table with read lock;
查看主库状态
锁表后,导出主库数据(新开一个ssh链接)
mkdir /data/backup -p mysqldump -uroot -p'abc@123' -S /data/3306/socket/mysql.sock --events -A -B |gzip >/data/backup/mysql_bak.$(date +%F).sql.gz
为了确保导出数据期间,数据库没有数据插入,导出主库完毕后能够再次检查主库状态信息,结果以下:
能够看到主库没有数据写入
完成主库导出后,解锁主库,恢复可写
unlock tables;
完成导出后,则可使用mysqldump将主库数据备份到从库上
4.4从库上配置
数据库的server-id通常在一套主从复制体系内时惟一的,从库的server-id须要和主库和其余从库的不一样,而且要注释掉从库的binlog参数配置,若是从库不作级联复制,而且不做为备份做用,则不须要开启binlog,开启反而会增长从库磁盘I/O压力。
可是有两种状况须要打开从库的binlog记录功能,记录数据库更新的SQL语句。
1)A-B-C级联同步,中间的B数据库服务,须要开启binlog记录功能
2)在从库作数据库备份要开启binlog记录功能,由于数据库备份必需要有全备和binlog日志,才是完成的备份。
完成从库3307的配置文件修改后,检查从库参数改变状况
使用mysqldump命令将主库备份文件恢复到从库
gzip -d mysql_bak.2019-01-07.sql.gz mysql -uroot -pabc@123 -S /data/3307/socket/mysql.sock <mysql_bak.2019-01-07.sql
4.5 主从库同步
从库的配置信息以下:
CHANGE MASTER TO MASTER_HOST='172.31.208.81', #主库ip MASTER_PORT=3306, #主库端口 MASTER_USER='rep', #主库上的复制权限用户rep MASTER_PASSWORD='abc@123', #rep用户密码 MASTER_LOG_FILE='mysql-bin.000001', #show master status时查看到的二进制文件名称,注意不能多空格 MASTER_LOG_POS=648; #show master status时看到的二进制日志偏移量,注意不能多空格
也能够按照以下方式配置从库链接主数据库进行配置
实际上,以上操做信息其实是写入从库新的master.info文件中
启动从库主从复制开关,并查看复制状态
mysql -uroot -pabc@123 -S /data/3307/socket/mysql.sock -e "start slave;" mysql -uroot -pabc@123 -S /data/3307/socket/mysql.sock -e "show slave status\G;"
主从复制是否成功,最关键的是下面的3项状态参数
mysql -uroot -pabc@123 -S /data/3307/socket/mysql.sock -e "show slave status\G;"|egrep "IO_Running|SQL_Running|_Behind_Master"
说明:
Slave_IO_Running :IO线程状态,IO线程负责从库到主库读取binlog日志,并写入从库的中继日志,状态为yes表示IO工做征程
Slave_SQL_Runing :SQL线程状态,SQL线程负责读取中继日志中的数据并转换为SQL 语句到从数据库,状态为YES 表示SQL线程工做正常
Seconds_Behind_Master: 复制过程当中从库比主库的延迟秒数
4.6总结
一、主库配置log-bin和server-id参数,从库只用配置 server-id,配置完成后重启数据库
二、主库增长同步用户帐号,例如rep 受权 repliaction slave权限
三、登录主库,整库锁表flush table with read lock,检查show master status 查看binlog的位置状态
四、同步以前,备份主库,可使用mydump导出到指定位置
五、完成主库导出后,执行unlock tables解锁主库
六、把主库导出的数据恢复到从库
七、根据主库show master status 查看的binlog位置状态,从库执行change master to 语句
八、从库开启复制开关,执行start slave;
9 、从库show slave status\G,检查同步状态