标签归档:MariaDB

Centos 7源代码安装配置 Apache 生产篇

什么是Apache?

Apache是​​互联网上最流行的网络web服务器。全球一半以上网站都是使用Apache作为服务器。其也是一个工业级的 Web服务器。

在本文中我主要介绍如何安装Apache HTTP服务器,你只要按照本教程的步骤操作,一定可以安装成功,需要说明的是,如果你只安装Apache,而不安装php,请在配置文件中,删除 FilesMatch 包含的内容,否则会报错找不到PHP。

如果你需要安装PHP/Mysql数据库,那么本站教程太适合你了,关于php和mysql的安装,请阅读:11、12步骤。

说明:本文教程适用于生产环境,Apache是基于FPM/FastCGI解析的PHP。

系统环境:Centos 7.4 Apache 2.4.29

1.更新系统

$ yum update && yum upgrade -y

2.安装扩展包以及依赖包

$ yum install epel-release -y
$ yum install gcc gcc-c++ openssl openssl-devel libtool expat-devel zlib-devel python-devel -y

3.安装pcre

$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
$ tar zxvf pcre-8.41.tar.gz
$ cd pcre-8.41
$ ./configure
$ make -j8 && make install

4.安装nghttp2

$ wget //github.com/nghttp2/nghttp2/releases/download/v1.27.0/nghttp2-1.27.0.tar.gz
$ tar zxvf nghttp2-1.27.0.tar.gz
$ cd nghttp2-1.27.0
$ ./configure
$ make -j8 && make install
$ echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
$ ldconfig

5.安装Apache httpd

创建用户与组并下载httpd apr apr-util安装包:

$ groupadd www
$ useradd -g www www
$ cd /tmp
$ wget //mirrors.shuosc.org/apache//httpd/httpd-2.4.29.tar.gz
$ wget //mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz
$ wget //mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz

解压相关包:

$ tar xvf httpd-2.4.29.tar.gz
$ tar xvf apr-1.6.3.tar.gz
$ tar xvf apr-util-1.6.1.tar.gz

apr-1.6.3apr-util-1.6.1移动到httpd-2.4.29/srclib目录下。操作如下:

$ cd httpd-2.4.29
$ cp -R ../apr-1.6.3 srclib/apr
$ cp -R ../apr-util-1.6.1 srclib/apr-util

注意:移动不准带版本号,否则编译安装时找不到库。

开始安装:

$ ./configure \
--prefix=/usr/local/apache \
--enable-mods-shared=most \
--enable-headers \
--enable-mime-magic \
--enable-proxy \
--enable-so \
--enable-rewrite \
--with-ssl \
--with-nghttp2 \
--enable-ssl \
--enable-deflate \
--with-pcre \
--with-included-apr \
--with-apr-util \
--enable-mpms-shared=all \
--with-mpm=prefork \
--enable-remoteip \
--enable-http2 \
--enable-dav \
--enable-expires \
--enable-static-support \
--enable-suexec \
--enable-modules=all \
$ make -j8 && make install

安装完成。

6.配置httpd.conf

$ cd /usr/local/apache/conf
$ vim httpd.conf

除默认配置外,请取消以下注释,开启相关模块:

LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule expires_module modules/mod_expires.so
LoadModule remoteip_module modules/mod_remoteip.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule http2_module modules/mod_http2.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule rewrite_module modules/mod_rewrite.so

在模块结尾部分添加如下内容:

<IfModule http2_module>
ProtocolsHonorOrder On
Protocols h2 http/1.1
</IfModule>

修改以下参数配置

将用户组设置为:

User www
Group www

默认值:

#ServerName www.example.com:80

修改为:

ServerName 0.0.0.0:80

注意:如果基于端口创建虚拟主机,请换行加端口,然后在虚拟主机配置文件中指定端口即可。

将配置文件中的所有:

AllowOverride None

修改为:

AllowOverride All

在以下内容位置:

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

添加:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

取消以下注释并添加apache支持python:

AddHandler cgi-script .cgi .py

取消以下注释:

Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-default.conf

以下内容在文件尾部添加

开启GZIP:

<IfModule mod_headers.c>
 AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
 <FilesMatch "\.(js|css|html|htm|png|jpg|swf|pdf|shtml|xml|flv|gif|ico|jpeg)$">
 RequestHeader edit "If-None-Match" "^(.*)-gzip(.*)$" "$1$2"
 Header edit "ETag" "^(.*)-gzip(.*)$" "$1$2"
 </FilesMatch>
 DeflateCompressionLevel 6
 SetOutputFilter DEFLATE
</IfModule>

设置apache安全:

ProtocolsHonorOrder On
PidFile /usr/local/apache/logs/httpd.pid
ServerTokens ProductOnly
ServerSignature Off

引入虚拟主机配置文件:

IncludeOptional conf/vhost/*.conf

7.创建目录及虚拟主机配置文件

$ mkdir -p /usr/local/apache/conf/vhost
$ mkdir -p /data/apps/web/renwolecom
$ vim /usr/local/apache/conf/vhost/renwolecom.conf

插入以下内容:

<VirtualHost *:80>
 ServerAdmin webmaster@example.com
 DocumentRoot "/data/apps/web/renwolecom"
 ServerName www.renwole.com
 ServerAlias renwole.com
 errorDocument 404 /404.html
 ErrorLog "/usr/local/apache/logs/renwolecom-error_log"
 CustomLog "/usr/local/apache/logs/renwolecom-access_log" combined

<FilesMatch \.php$>
 SetHandler "proxy:unix:/tmp/php-cgi.sock|fcgi://localhost"
 </FilesMatch>

<Directory "/data/apps/web/renwolecom">
 SetOutputFilter DEFLATE
 Options FollowSymLinks
 AllowOverride All
 Require all granted
 DirectoryIndex index.php index.html index.htm default.php default.html default.htm
 </Directory>
</VirtualHost>

以上内容请根据自己的网站实际路径修改。

说明:如果没有域名,请将域名绑定部分修改为127.0.0.1,在http.conf中添加其他端口即可实现IP+端口访问,要记得防火墙放行端口。

注意:建议清空httpd-vhosts.conf中的内容,或者不开启引用,否则重启httpd服务时会有警告,但不影响使用,主要原因是找到默认配置中的网站目录路径。

8.创建system系统单元启动文件

$ vim /usr/lib/systemd/system/httpd.service

添加以下内容:

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/usr/local/apache/bin/apachectl
Description=LSB: starts Apache Web Server
Before=runlevel2.target
Before=runlevel3.target
Before=runlevel4.target
Before=runlevel5.target
Before=shutdown.target
After=all.target
After=network-online.target
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/usr/local/apache/bin/apachectl start
ExecStop=/usr/local/apache/bin/apachectl stop

9.加入开机自启/启动/停止/重启

$ systemctl enable httpd
$ systemctl start httpd
$ systemctl stop httpd
$ systemctl restart httpd

10.设置Firewalld防火墙

$ firewall-cmd --permanent --zone=public --add-service=http
$ firewall-cmd --permanent --zone=public --add-service=https
$ firewall-cmd --reload

接下来你就可以使用域名或IP访问你的网站了。

11.部署PHP篇

请参阅《Centos 7源码编译安装 php7.1 生产篇

12.部署Mysql篇

请参阅《Centos 7二进制安装配置 MariaDB(MySQL)数据库

Apache HTTP服务器的安装与配置至此已经结束,如果在安装配置过程中出现任何报错,请查看/usr/local/apache/logs/下的错误日志,以便你能快速解决所遇到的问题。

若还有其他指教,欢迎你的留言。

优化并修复 MariaDB(MySQL)数据库损坏的表文件

平时维护网站的时候一定会遇到数据表崩溃,这可能是MySQL没有正常关闭或断电等原因导致。这时就需要我们手动修复表文件,通常可以通过数据库管理工具,例如:phpmyadmin 进行可视化修复。下面我讲解在Linux下通过命令修复损坏的表文件。

以下操作以本博客使用的 WordPress 程序演示,如果部分表存在问题则可以修复或优化。

登录MariaDB数据库

$ mysql -u root -p
Enter password:[输入您的mysql或管理其数据库的密码]
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 84162
Server version: 10.3-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use renwolecomdb;

查看当前所有数据表文件:

MariaDB [renwolecomdb]> show tables;
+------------------------+
| Tables_in_renwolecomdb  |
+------------------------+
| wp_baidusubmit_sitemap |
| wp_baidusubmit_urlstat |
| wp_commentmeta         |
| wp_comments            |
| wp_links               |
| wp_options             |
| wp_postmeta            |
| wp_posts               |
| wp_term_relationships  |
| wp_term_taxonomy       |
| wp_termmeta            |
| wp_terms               |
| wp_usermeta            |
| wp_users               |
+------------------------+
14 rows in set (0.00 sec)

如果感觉您的数据库某个表加载较慢,可以进行数据表优化,命令如下:

MariaDB [renwolecomdb]> OPTIMIZE TABLE wp_baidusubmit_urlstat;
+------------------------------------+----------+----------+----------+
| Table                              | Op       | Msg_type | Msg_text |
+------------------------------------+----------+----------+----------+
|renwolecomdb.wp_baidusubmit_urlstat | optimize | status   | OK       |
+------------------------------------+----------+----------+----------+
1 row in set (0.11 sec)

上面已打印出详细的分析报告。

下面将修复被破坏的表文件,命令如下:

MariaDB [renwolecomdb]> REPAIR TABLE wp_baidusubmit_sitemap;
+------------------------------------+--------+----------+----------+
| Table                              | Op     | Msg_type | Msg_text |
+------------------------------------+--------+----------+----------+
|renwolecomdb.wp_baidusubmit_sitemap | repair | status   | OK       |
+------------------------------------+--------+----------+----------+
1 row in set (0.00 sec)

修复成功。

修复 InnoDB 引擎的表文件,命令如下:

MariaDB [renwolecomdb]> REPAIR TABLE wp_commentmeta;
+----------------------------+--------+----------+---------------------------------------------------------+
| Table                      | Op     | Msg_type | Msg_text                                                |
+----------------------------+--------+----------+---------------------------------------------------------+
|renwolecomdb.wp_commentmeta | repair | note     | The storage engine for the table doesn't support repair |
+----------------------------+--------+----------+---------------------------------------------------------+
1 row in set (0.00 sec)

提示错误报告:The storage engine for the table doesn't support repair.

上述报错说明该数据库InnoDB引擎数据表不支持修复。

但需要说明的是:

InnoDB损坏表的几率非常小,因为InnoDB是先写入日志,再写入数据库,因此InnoDB引擎比MyISAM健壮很多,而且他有自我修复能力,一般情况一旦InnoDB的数据文件损坏,只能找备份恢复。

所以我们平时做运维的一定要对数据备份、备份、再备份,以防万一。

MySQL 5.8(MariaDB)启动后立即停止解决方案

安装一切都很顺利,除了最后一步,启动mysql:

$ mysqld –skip-grant-tables –user=mysql

打印出以下错误信息,然后又停止了:

[ERROR] Can’t find messagefile ‘/usr/share/errmsg.sys’

在谷歌搜索之后,我找到了添加以下参数启动的方法:

–lc-messages-dir=”/usr/local/mysql/share/english/

为了启动它并让它实际工作,我使用了以下命令:

$ mysqld –skip-grant-tables –user=mysql –lc-messages-dir=”/usr/local/mysql/share/english/

最后成功启动。

MariaDB MaxScale 2.1.3中间件数据库读写分离安装配置

操作系统:CentOS Linux release 7.3.1611 (Core)
数据库:MariaDB-10.2.6-linux-glibc_214-x86_64
MaxScale服务器:10.200.10.55
主服务器:172.16.8.56
从服务器:172.16.8.57
从服务器:172.16.8.58

1.maxscale的安装方式有很多,例如源码安装、rpm、二进制构建等,我选择二进制进行安装。

根据场景需要下载相对应的版本,下载地址;//mariadb.com/downloads/maxscale

[root@localhost ~]# groupadd maxscale
[root@localhost ~]# useradd -g maxscale maxscale
[root@localhost ~]# cd /usr/local
[root@localhost local]# wget //downloads.mariadb.com/MaxScale/2.1.3/centos/7server/x86_64/maxscale-2.1.3.centos.7.tar.gz
[root@localhost local]# tar zxvf maxscale-2.1.3.centos.7.tar.gz
[root@localhost local]# ln -s maxscale-2.1.3.centos.7 maxscale
[root@localhost local]# cd maxscale
[root@zhu56 maxscale]# chown -R maxscale var

建议创建软连接,这样有助于以后的版本升级及后期维护。

2.首次安装maxscale需要创建日志相关目录

[root@localhost ~]# mkdir /var/log/maxscale
[root@localhost ~]# mkdir /var/lib/maxscale
[root@localhost ~]# mkdir /var/run/maxscale
[root@localhost ~]# mkdir /var/cache/maxscale

3.以下目录必须具备maxscala用户权限

[root@localhost ~]# chown maxscale /var/log/maxscale
[root@localhost ~]# chown maxscale /var/lib/maxscale
[root@localhost ~]# chown maxscale /var/run/maxscale
[root@localhost ~]# chown maxscale /var/cache/maxscale

4.为了能让Maxscale能顺利启动,还需要创建配置文件,在Maxscale目录下有配置文件模板拷贝到etc下即可。

[root@localhost ~]# cp /usr/local/maxscale/etc/maxscale.cnf.template /etc/maxscale.cnf

5.在修改配置文件之前,需要在主服务器上创建一个用户并给予授权,而这个用户用于MySQL监控、路由功能

MariaDB [(none)]> create user 'jiankongdb'@'%' identified by 'jiankong123';
MariaDB [(none)]> grant SELECT on mysql.user to 'jiankongdb'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.db TO 'jiankongdb'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.tables_priv TO 'jiankongdb'@'%';
MariaDB [(none)]> GRANT SHOW DATABASES ON *.* TO 'jiankongdb'@'%';
MariaDB [(none)]> grant REPLICATION CLIENT on *.* to 'jiankongdb'@'%';

MariaDB [(none)]> GRANT replication slave, replication client,SELECT ON *.* TO jiankongdb@'%';

6.查看授权情况

MariaDB [(none)]> SHOW GRANTS FOR'jiankong'@'%';

7.接下来就开始修改maxscale.cnf配置文件,否则无法启动。

[root@localhost ~]# vim /etc/maxscale.cnf

# MaxScale documentation on GitHub:
# //github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Documentation-Contents.md

# Global parameters
#
# Complete list of configuration options:
# //github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Getting-Started/Configuration-Guide.md
#全局配置
[maxscale]
threads=1

# Server definitions
#
# Set the address of the server to the network
# address of a MySQL server.
#

[server1]
type=server
address=172.16.8.56
port=3306
protocol=MySQLBackend
serv_weight=1

[server2]
type=server
address=172.16.8.57
port=3306
protocol=MySQLBackend
serv_weight=3

[server3]
type=server
address=172.16.8.58
port=3306
protocol=MySQLBackend
serv_weight=3


# Monitor for the servers
#
# This will keep MaxScale aware of the state of the servers.
# MySQL Monitor documentation:
# //github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Monitors/MySQL-Monitor.md
#MariaDB状态监控
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2,server3
user=jiankong
passwd=jiankong123
monitor_interval=10000
detect_stale_master=true #即使从全挂掉,保证主担任读写

# Service definitions
#
# Service Definition for a read-only service and
# a read/write splitting service.
#

# ReadConnRoute documentation:
# //github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Routers/ReadConnRoute.md
#读
[Read-Only Service]
type=service
router=readconnroute
servers=server1,server2,server3
user=jiankong
passwd=jiankong123
router_options=slave
enable_root_user=1 #允许root用户登录执行
weightby=serv_weight #主从权重

# ReadWriteSplit documentation:
# //github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Routers/ReadWriteSplit.md
#写
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2,server3
user=jiankong
passwd=jiankong123
max_slave_connections=100%
use_sql_variables_in=master #保证会话的一致性
enable_root_user=1 #允许root登录
max_slave_replication_lag=3600 #允许从超出主的同步时间,超出则不路由

# This service enables the use of the MaxAdmin interface
# MaxScale administration guide:
# //github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Reference/MaxAdmin.md

[MaxAdmin Service]
type=service
router=cli

# Listener definitions for the services
#
# These listeners represent the ports the
# services will listen on.
#

[Read-Only Listener]
type=listener
service=Read-Only Service
protocol=MySQLClient
port=4008

[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006

[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default

保存并退出。
8.下面创建启动脚本

[root@localhost ~]# cp /usr/local/maxscale-2.1.3.centos.7/share/maxscale.service /usr/lib/systemd/system/
[root@localhost ~]# vim /usr/lib/systemd/system/maxscale.service

9.修改maxscale.service中的ExecStart=///bin/maxscale为ExecStart=/usr/local/maxscale/bin/maxscale

[root@localhost ~]# chmod 755 /usr/lib/systemd/system/maxscale.service
[root@localhost ~]# systemctl enable maxscale
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start maxscale

10.添加变量值

[root@localhost ~]# vi /etc/profile //最后一行添加以下内容保存退出!

PATH=$PATH:/usr/local/maxscale/bin
export PATH

[root@localhost ~]# source /etc/profile //使其变量立即生效

11.接下来就可以使用MaxAdmin进行管理。MaxAdmin是一个简单的客户端管理界面,可用于与MariaDB MaxScale服务器进行交互,可以显示MariaDB MaxScale内部的统计信息状态以及对MariaDB MaxScale操作的控制。详情:
//mariadb.com/kb/en/mariadb-enterprise/maxadmin-admin-interface/

[root@localhost ~]# maxadmin //回车
MaxScale> list servers
Servers.
---------------+--------------+-------+-------------+-----------------
Server | Address | Port | Connections | Status 
---------------+--------------+-------+-------------+-----------------
server1 | 172.16.8.56 | 3306 | 0 | Master, Running
server2 | 172.16.8.57 | 3306 | 0 | Slave, Running
server2 | 172.16.8.58 | 3306 | 0 | Slave, Running
---------------+--------------+-------+-------------+-----------------

12.至此MaxScale已经配置完成。现在就可以使用客户端连接Maxscale服务器端 端口为4006。

Linux Centos7 MariaDB(MySQL)10.2 主从半同步复制模式安装配置

实验环境情况;

操作系统:CentOS Linux release 7.3.1611 (Core)
数据库:MariaDB-10.2.6-linux-glibc_214-x86_64

1.实现半同步复制功能需要在主从服务器上安装google提供的插件。插件在MySQL二进制/usr/local/mysql/lib/plugin目录下,分别是;

主插件: semisync_master.so
从插件: sosemisync_slave.so

2.分别在主从节点上安装插件

3.主服务器安装插件:

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; //安装插件 
MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled = 1; //启动插件模块 
MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_timeout = 1000; //设置超时时间

4.从服务器安装插件;

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; //安装插件 
MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled = 1; //启动插件模块
MariaDB [(none)]> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD; //重启进程使插件模块生效

5.在主Master和从Slave的my.cnf中编辑添加以下:

[mysqld]
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 1000

[mysqld]
rpl_semi_sync_slave_enabled = 1

6.我们至此已经实现了mysql数据库复制的半同步方式的架构。在主服务器的数据库中创建一个数据库或表,在从服务器停止后,查看主服务器是否初次延迟,二次创建数据库则降为异步同步,当从服务器启动后如果同步成功,那说明配置已经没有问题。

Linux MariaDB(MySQL)10.2 数据库基于GTID主从同步复制安装配置

原创作品,转载请注明本文地址

操作系统:CentOS Linux release 7.3.1611 (Core)
数据库:MariaDB-10.2.6-linux-glibc_214-x86_64

主服务器:10.10.10.56
从服务器:10.10.10.163

1.今天要做的事,单向主从同步

关于MariaDB(MySQL)数据库安装请参阅《Centos7.3 x64位二进制安装(MySQL)MariaDB 10.1.20数据库之生产篇》下面就开始MariaDB(MySQL)服务器集群的配置过程。

2.在MariaDB(MySQL)配置文件中修改或添加以下信息

vim /etc/my.cnf

主从通用配置

binlog-format = mixed #二进制日志记录的模式(高版本默认开启)
binlog-checksum = CRC32 #可使主机为写入二进制日志的事件写入校验(高版本默认开启)
sync-master-info = 1 #MariaDB依靠操作系统将master.info文件刷新到磁盘。
sync_relay_log_info = 1 #MariaDB依靠操作系统将relay-log.info文件刷新到磁盘。
expire_logs_days = 7 #日志文件过期天数,默认是 0,表示不过期 
master-verify-checksum = 1 #主服务器效验
slave-sql-verify-checksum = 1 #从服务器效验

3.主服务器Master除了通用配置外,还需要加入以下代码

server-id = 56 #MySQL服务器ID,不重复
log-bin = mysql-bin #二进制日志(默认开启)
sync-binlog = 1 #主服务器进行设置,用于事务安全
log-bin-index = mysql-bin

4.从服务器Slave除了通用配置外,还需要加入以下代码

server-id = 163
relay-log = relay-bin #中继日志
slave-parallel-threads = 2 #设定从服务器的SQL线程数
#replicate-do-db = renwoleblogdb#复制指定的数据库,多个写多行
replicate-ignore-db = mysql #不备份的数据库,多个写多行
relay_log_recovery = 1 #从站崩溃后可以使用,防止损坏的中继日志处理。
log-slave-updates = 1 #slave将复制事件写进自己的二进制日志
relay-log-index = relay-bin

此外Mysql从服务器没有必要开启二进制日志,但是在一些情况下,必须设置,例如;如果slave为其它slave的master,必须设置bin_log。我这里就默认开启。

5.以上只是简单的介绍了每个参数的作用,这些参数的具体设置还需根据用户的实际情况进行相关调整,具体可到官方了解

《复制和二进制日志服务器系统变量》
//mariadb.com/kb/en/mariadb/replication-and-binary-log-server-system-variables/

关于系统变量的兼容性,可参阅官方

《MariaDB与MySQL兼容性》
//mariadb.com/kb/en/mariadb/mariadb-vs-mysql-compatibility/

6.主服务器Master授权配置

主MariaDB服务器上创建专用账号并授权数据库权限,以及从服务器IP的远程访问

# mysql -uroot -p
Enter password:【输入你的MySQL密码回车】
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'renwoleuseracc'@'%' IDENTIFIED BY 'renwoleuserpass'; //创建Slave专用备份账号
MariaDB [(none)]> flush privileges; //刷新MySQL权限
MariaDB [(none)]> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; //查看授权情况
MariaDB [(none)]> flush tables with read lock; //锁定数据库防止master值变化
MariaDB [(none)]> show master status; //获取master状态值
+-----------------+----------+------------+-----------------+
| File |Position |Binlog_Do_DB|Binlog_Ignore_DB |
+-----------------+----------+------------+-----------------+
| mysql-bin.000006| 627 | | |
+-----------------+----------+------------+-----------------+
1 row in set (0.00 sec)

7.一旦获取了备份时正确的Binlog位点(文件名和偏移量),那么就可以用BINLOG_GTID_POS()函数来计算GTID

MariaDB [(none)]> SELECT BINLOG_GTID_POS("mysql-bin.000006", 627);
+------------------------------------------+
| BINLOG_GTID_POS('mysql-bin.000006', 627) |
+------------------------------------------+
| 0-56-4 |
+------------------------------------------+
1 row in set (0.01 sec)

8.从服务器Slave配置

正如官方所说从MariaDB 10.0.13版本开始,mysqldump会自动完成这个工作,并且把GTID的写在导出文件中,只要设置 –master-data 或 –dump-slave 的同时设置 –gtid 即可。

这样的话新的SLAVE就可以通过设置 @@gtid_slave_pos 的值来设定复制的起始位置,用 CHANGE MASTER 把这个值传给主库,然后开始复制:

# mysql -uroot -p
Enter password:【输入你的MySQL密码】
MariaDB [(none)]> SET GLOBAL gtid_slave_pos = "0-56-4";
MariaDB [(none)]> change master to master_host='10.10.10.56',MASTER_PORT = 3306,master_user='renwoleuseracc',master_password='renwoleuserpass',master_use_gtid=slave_pos; //进行主从授权
MariaDB [(none)]> START SLAVE; //启动Slave
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
 Slave_IO_State: Waiting for master to send event
 Master_Host: 10.10.10.56
 Master_User: renwoleuseracc
 Master_Port: 3306
 Connect_Retry: 60
 Master_Log_File: mysql-bin.000006
 Read_Master_Log_Pos: 627
 Relay_Log_File: relay.000035
 Relay_Log_Pos: 537
 Relay_Master_Log_File: mysql-bin.000006
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
 ...
 ...
 ...
 Using_Gtid: Slave_pos
 Gtid_IO_Pos: 0-56-4

9.如果 Slave_IO_Running 与 Slave_SQL_Running 都为YES,表明从服务已经运行,Using_Gtid列判断GTID值是否一致。
说明:

master_host 表示master授权地址
MASTER_PORT MySQL端口
master_user 表示master授权账号
master_password 表示密码
master_use_gtid GTID变量值

10.接下来解锁主服务器数据库表

MariaDB [(none)]> unlock tables; //解锁数据表
MariaDB [(none)]> show slave hosts; //查看从服务器连接状态
MariaDB [(none)]> show global status like "rpl%"; //查看客户端

11.从服务器Slave查看relay的所有相关参数

MariaDB [(none)]> show variables like '%relay%';

12.主从已经配置完成。现在无论在主服务器上增、改、删、查,都会同步到从服务器,根据自己的需求进行相关测试即可。
关于master slave重置语法

重置master的核心语法

RESET MASTER; 意思是执行 RESET MASTER 将删除所有二进制日志文件,并创建一个空白的二进制日志文件,数字后缀为.000001,RESET MASTER 不会影响SLAVE服务器上的工作状态,所以执行这个命令会导致Slave找不到Master的binlog,从而造成同步失败。

重置slave的核心语法

RESET SLAVE; 含义是;RESET SLAVE 将清除slave上的同步位置并删除所有旧的同步中继日志文件,但重置前必须先停止slave服务(STOP SLAVE)

以后有时间,我将介绍基于GTID的半同步主从的文章,这也是在生产中所需要记录下来,以备以后使用。

更多介绍://mysql.taobao.org/monthly/2016/02/08/

linux MariaDB(MySQL)数据库更改用户权限

平时维护MariaDB(MySQL)数据库服务器,难免会用到一些常用的命令,MariaDB数据库长时间不出问题,有些sql语句就会忘记,之前也没有记载,今天没事就记录下,也共享给大家一块看看,有不足之处还望谅解。

本文操作适用于MariaDB所有版本,适用于MySQL5.2以上版本
本文生产环境Centos7.3 64位 ,MariaDB server 10.2.5

MariaDB 赋予用户权限命令的简单格式可概括为:

grant 权限 on 数据库对象 to 用户;

# mysql -u root -p //登录数据库
 Enter password:
 MariaDB [(none)]> show databases; //查看当前数据库中所有数据库
 MariaDB [(none)]> create database renwole; //新建数据库名为“renwole”
 MariaDB [renwoleBD]> show tables; //显示某个数据库中的表文件
 MariaDB [(none)]> select version(),current_date; //查看数据库版本和当前日期
 MariaDB [(none)]> drop database renwole; //删除renwole数据库
 MariaDB [renwoleDB]> desc 表名称; //查看数据库表结构
 MariaDB [(none)]> show variables like '%dir%'; //查看数据库存储路径
 MariaDB [(none)]> show grants; 查看当前用户权限
 MariaDB [(none)]> show grants for root@'localhost'; //查看用户权限

下面就MariaDB数据库实例讲解,例如:

创建添加一个renwole用户,密码为renwole123

# mysql -u root -p //登录数据库
 Enter password:
 MariaDB [(none)]> insert into mysql.user(Host,User,Password) values("localhost","renwole",password("renwole123"));

新建一个renwoleDB数据库,并授权用户renwole拥有该数据库的所有权限。

MariaDB [(none)]> create database renwoleDB; //新建
 MariaDB [(none)]> grant all privileges on renwoleDB.* to renwole@% identified by 'renwole123'; //授权,关键字 “privileges” 可以省略。
 MariaDB [(none)]> flush privileges; //刷新用户权限

如果想给一个用户查询、插入、更新、删除数据库中的所有表数据权利,可以这样来写:

MariaDB [(none)]> grant select on on renwoleDB.* to renwole@’%’ //查询
 MariaDB [(none)]> grant insert on on renwoleDB.* to renwole@’%’ //插入
 MariaDB [(none)]> grant update on on renwoleDB.* to renwole@’%’ //更新
 MariaDB [(none)]> grant delete on on renwoleDB.* to renwole@’%’ //删除

或者,用一个语句命令替代:

MariaDB [(none)]> grant select,insert,delete,update on renwoleDB.* to renwole@’%’ identified by 'renwole123';

如果想查看所有Mysql用户的权限,代码如下;

MariaDB [(none)]> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

如果想删除一个用户及权限,可以这样写;

MariaDB [(none)]> drop user renwole@localhost;

如果想修改一个用户密码;

MariaDB [(none)]> update mysql.user set password=password('New-password') where User="renwole" and Host="%";
 MariaDB [(none)]> flush privileges;

添加高级root用户整个mysql服务器权限

grant all on *.* to root@'%' identified by 'Password';

注意:【identified by】这个句子可以顺带设置密码,如果不指定该用户口令不变。

撤销已经赋予给MariaDB用户的权限。
revoke 跟 grant 的语法相似,只需要把关键字 “to” 换成 “from” 即可,例如:

grant all on *.* to renwole@%;
 revoke all on *.* from renwole@%;

MariaDB数据库的 grant、revoke 用户权限注意事项;grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“,例如:

MariaDB [(none)]> grant select on renwoleDB.* to renwole@% with grant option;

这个特性一般用不到。实际中,数据库权限最好由root用户来统一管理。

注意:有时候renwole@’%’授权任意主机连接的时候需要加单引号,但有时又不需要。

linux centos7.3修改现有mariadb数据库存储路径

有的lnmp环境包或yum安装方式默认将mariadb数据库装在系统盘,其中就包括数据存储文件,万一系统宕机无法启动,那么数据文件就有损坏的可能,甚至造成无法挽回的局面。接下来我们就可以单独将数据存储文件放在其他分区或数据盘,这样即便是系统挂掉,也能轻易快速恢复mariadb数据库的正常运行。

如果你不知道当前数据库路径,只需要输入以下命令即可查看到:

回车后输入您的mariadb密码后回车

# mysql -uroot -p

输以下命令显示各种mariadb的路径调用情况。其中datadir项就是现存储的路径。

MariaDB [(none)]> show variables like ‘%dir%’;

退出数据库登录状态

MariaDB [(none)]> exit;

停止数据库

# systemctl stop mysql.server

新建mariadb新存储的路径文件夹

# mkdir -p /home/mysql/data

进入home目录

# cd /home

给新的路径文件夹mysql用户权限

# chown -R mysql:mysql /mysql

修改下面启动脚本mysql文件中的datadir路径,mysql启动脚本路径不一样,也有可能会在/usr/lib/systemd/system目录下(centos7)

# vi /etc/init.d/mysql

找到datadir=/var/lib/mysql修改成datadir=/home/mysql/data,如果有相同的/var/lib/mysql路径,同样修改为/home/mysql/data,

例如:

“innodb_data_home_dir”和“innodb_log_group_home_dir“

修改后保存并退出,在修改my.cnf中的数据存储路径

修改my.cnf文件中datadir=路径和上面修改的方法一样,修改还好以后保存并退出,然后启动mariadb服务。

# vi /etc/my.cnf

# systemctl start mysql.server

注意:如果你有数据文件,那么就把你的贝到/home/mysql/data下,还有/var/lib/mysql下的mysql件夹也拷贝过去,其他文件就不要拷贝了,这样你新建的用户和密码都会是你以前的。如果拷贝所有文件,就会启动报错。

如果以上方式不能成功且启动报错,可以在重启失败后执行初始化数据库命令,执行数据库命令前,/home/mysql/data下必须是空的,初始化成功后再导入数据库,以下是初始化数据库的命令:

# /usr/local/mysql/scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/home/mysql/data

再次启动就正常了

# systemctl restart mysql.server

初始化成功后,数据库密码是空的,执行以下命令开始设置密码

# /usr/local/mysql/bin/mysql_secure_installation

注意:第一个是提示你输入mysql密码,其实新安装的mysql默认是空密码,然后直接回车输入两次新密码回车,接下来全部按Y即可(基本上是删除了test测试数据库和匿名账号和删除后立刻生效(最后一个Y))。
到此数据库修改路径已经完成。如你有更好的方法,希望你能提出来,我们一起学习共同努力、进步。转载请注明,谢谢!