docker安装配置Mariadb数据库

1、获取mariadb镜像地址

root@debian1:~/nginx# docker search mariadb
NAME                                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mariadb                              MariaDB is a community-developed fork of M...   1417      [OK]
bitnami/mariadb                      Bitnami MariaDB Docker Image                    39                   [OK]

2、拉去maridb的最新镜像

root@debian1:~/nginx# docker pull  mariadb
Using default tag: latest
latest: Pulling from library/mariadb

3:启动,mariadb镜像

root@debian1:~/nginx# docker run  --privileged  -d -e TIMEZONE=Asis/Shanghai -e MYSQL_ROOT_PASSWORD=hanye131 -e SERVER_ID=1 -v $PWD/mysql_db:/var/lib/mysql  -p 3306:3306  mariadb
255650e5e83d27402b1df338c09c0639b1512e73ef27cd31e1f2c90509dc104c
root@debian1:~/nginx# docker ps -a
CONTAINER ID        IMAGE         COMMAND  CREATED      STATUS           PORTS               NAMES
255650e5e83d        mariadb      "docker-entrypoint..."   3 seconds ago       Up 1 second       0.0.0.0:3306->3306/tcp   festive_ride

4、查看启动占用的端口

root@debian1:~/nginx# netstat  -tunl|grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN

5、链接docker的mysql

root@debian1:~/nginx# mysql -uroot -phanye131 -h127.0.0.1
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 8
Server version: 5.5.5-10.2.6-MariaDB-10.2.6+maria~jessie mariadb.org binary distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql>

6、错误解决方案

如果提示无法链接找到sock文件,你需要链接到docker的mariadb容器之内来授权链接

6.1 链接到docker mariadb之内

获取mariadb的CONTAINER ID


root@debian1:~/nginx# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 255650e5e83d mariadb "docker-entrypoint..." 10 minutes ago Up 10 minutes 0.0.0.0:3306->3306/tcp festive_ride 360baf71efb0 a3ae0b27ec04 "/run.sh bash" 3 hours ago Exited (2) 3 hours ago nginx

我这里的mariadb的镜像的CONTAINER ID是 255650e5e83d

6.2 登录mariadb之内

root@debian1:~/nginx# docker exec -it 255650e5e83d bash
root@255650e5e83d:/#

6.3 授权mysql的root用户的链接权限(其通用户同样设置)


MariaDB [(none)]> grant all on *.* to 'root'@'192.168.1.%' identified by 'hanye131'; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.01 sec)

7、再次链接mysql即可

Debian 9配置Apache MariaDB Drupal运行环境

Drupal是一个免费的开源内容管理系统,可用于创建在线内容,网站和用户社区。 它是用PHP语言编写的,使用MySQL作为数据库后端,并在GNU通用公共许可证下分发。 Drupal拥有超过17,000个插件来自定义其功能。 Drupal在所有Web服务器上运行,包括Apache,Nginx,IIS,Lighttpd以及后端数据库MySQL,MariaDB,MongoDB,SQLite,MS SQL Server,PostgreSQL等。

在本文中,我们将演示如何在Debian 9服务器上安装Drupal 8。

要求

  • 在您的系统上运行Debian 9的服务器。
  • Apache 2.x,MySQL或具有PDO的MariaDB。
  • 在您的服务器上设置sudo权限的非root用户。

1. 入门指南

首先,建议使用最新的稳定版本来更新系统。 您可以通过运行以下命令来执行此操作:

sudo apt-get update -y
sudo apt-get upgrade -y

一旦您的系统更新,您将需要安装一些所需的软件包到您的系统。 您可以通过运行以下命令来安装它们:

sudo apt-get install wget git unzip nano -y

2. 安装LAMP服务器

在开始安装Drupal之前,需要在服务器上安装并配置LAMP服务器(Apache,PHP和MySQL)。

首先,使用以下命令开始安装Apache Web服务器:

sudo apt-get install apache2 -y

安装完成后,您将需要启动Apache服务,并使其能够在下次系统引导时自动启动。 为此,请运行以下命令:

sudo systemctl start apache2
sudo systemctl enable apache2

接下来,通过运行以下命令来安装PHP所需的模块:

sudo apt-get install php7.0 libapache2-mod-php7.0 php7.0-cli php7.0-mcrypt php7.0-intl php7.0-mysql php7.0-curl php7.0-gd php7.0-soap php7.0-xml php7.0-zip -y

接下来,您需要在php.ini文件中进行一些更改:

sudo nano /etc/php/7.0/cli/php.ini

更改行如下所示:

memory_limit = 512M
date.timezone = UTC
cgi.fix_pathinfo=0
upload_max_filesize = 100M
post_max_size = 100M

完成后,保存并关闭文件。

3. 安装并配置MariaDB

Drupal需要用于数据库后端的MariaDB / MySQL,因此您需要安装它。 您可以通过运行以下命令来安装它:

sudo apt-get install mariadb-server -y

安装完成后,启动MariaDB服务,并通过运行以下命令使其在系统启动时自动启动:

sudo systemctl start mysql
sudo systemctl enable mysql

接下来,您将需要为数据库设置安全性。 您可以运行以下命令来保护MariaDB数据库:

sudo mysql_secure_installation

此脚本设置root密码,禁用远程root登录,删除测试数据库并删除匿名用户,如下所示:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n

 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

确保数据库后,Drupal需要一个空的MySQL数据库。 因此,您将需要为Drupal安装创建一个MySQL数据库和用户。

首先,使用以下命令登录到MySQL shell:

mysql -u root -p

在询问时输入root密码,然后使用以下命令创建Drupal的数据库:

MariaDB [(none)]>CREATE DATABASE drupaldb;

接下来,创建drupal数据库的用户,并使用以下命令向drupal数据库授予权限:

MariaDB [(none)]>GRANT ALL PRIVILEGES on drupaldb.* to ‘drupal’@’localhost’ identified by ‘password’;

接下来,运行FLUSH PRIVILEGES命令,以退出特权:

MariaDB [(none)]>FLUSH PRIVILEGES;

最后,使用以下命令退出MariaDB控制台:

MariaDB [(none)]>q

4. 安装并配置Drupal

首先,您需要从其官方网站下载最新的稳定版本的Drupal,否则您可以使用wget命令直接下载,如下所示:

wget https://ftp.drupal.org/files/projects/drupal-8.3.4.zip

之后,提取下载的zip文件,并将提取的Drupal目录移动到Apache根目录:

unzip drupal-8.3.4.zip
sudo mv drupal-8.3.4 /var/www/html/drupal

接下来,您将需要更改drupal目录的一些权限:

sudo chown -R www-data:www-data /var/www/html/drupal
sudo chmod -R 777 /var/www/html/drupal

接下来,您将需要为drupal创建一个Apache虚拟主机文件。 为此,请在/ etc / apache2 / sites-available /目录中创建一个新的drupal.conf文件:

sudo nano /etc/apache2/sites-available/drupal.conf

添加以下行:

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/drupal
ServerName 192.168.15.189
ServerAlias www.example.com
<<Directory "/var/www/html/drupal/">
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/drupal-error_log
CustomLog /var/log/apache2/drupal-access_log common
</VirtualHost>

完成后保存并关闭文件,然后使用以下命令启用虚拟主机:

sudo a2ensite drupal

您还需要激活重写模块。

sudo a2enmod rewrite

最后,重新启动Apache服务以使用以下命令应用此更改:

sudo systemctl restart apache2

5. 访问Drupal Web界面

一切都已安装和配置。 接下来,您将需要通过UFW防火墙允许Drupal。 默认情况下,UFW防火墙在Debian 9中禁用,因此您需要先启用它。

sudo ufw enable

然后,通过运行以下命令,通过UFW防火墙允许端口80:

sudo ufw allow 80

最后,打开您的网页浏览器,并导航到URL http://192.168.15.189启动Drupal Web安装程序。 您应该看到以下页面:

Apache

选择英文,然后点击保存并继续按钮,您应该看到以下图像:

Apache

选择安装配置文件,然后单击保存并继续按钮,然后验证所有要求,然后单击保存并继续按钮。 您应该看到以下图像:

Apache

在“数据库配置”页面中,提供数据库名称,数据库用户名和密码,数据库主机等所需的所有数据库详细信息,然后单击“保存并继续”按钮,您应该看到以下图像:

Apache

在Drupal站点配置页面中,提供您的站点名称,管理员用户名和密码,然后单击保存并继续按钮开始安装Drupal。 安装Drupal后,您应该在以下图像中看到Drupal仪表板:

Apache

结论

恭喜! 您已经在Debian 9服务器上成功安装并配置了Drupal。

Centos7安装配置mariaDB + nginx + php-fpm环境

Centos7 搭建mariaDB + nginx + php环境

系统更新

  • 1.安装开启安装EPEL YUM源
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum makecache
  • 2.系统更新
[root@localhost ~]# yum update
  • 3.解决The remote SSH server rejected X11 forwarding request提示
[root@localhost ~]# yum install xorg-x11-xauth
# 编辑/etc/ssh/sshd_config文件中的X11Forwarding参数为yes
[root@localhost ~]# vim /etc/ssh/sshd_config
  • 4.安装编译组件和依赖
[root@localhost ~]# yum -y install gcc gcc-c++ make unixODBC wxBase wxGTK wxGTK-gl ncurses-devel zlib zlib-devel openssl openssl-devel kernel-devel m4 xmlto net-tools lksctp-tools socat cmake perl perl-JSON libtool pcre pcre-devel yasm yasm-devel libmcrypt libmcrypt-devel libvpx libvpx-devel tiff tiff-devel libpng libpng-devel freetype freetype-devel jpeg jpeg-devel libgd libgd-devel t1lib t1lib-devel gd gd-devel

修改主机名

  • 1.将/etc/hostname中的值修改为localhost或者其他主机名
[root@localhost ~]# vim /etc/hostname
  • 2.在/etc/sysconfig/network 中添加或者修改为HOSTNAME=localhost或者其他主机名
[root@localhost ~]# vim /etc/sysconfig/network
  • 3.将/etc/hosts 中各项值修改为localhost或者其他主机名
[root@localhost ~]# vim /etc/hosts
  • 4.临时修改主机名
[root@localhost ~]# hostname localhost

添加用户

添加新的用户账号使用useradd命令,其语法如下

useradd 选项 用户名

其中各选项含义如下:
代码:

  • -c comment 指定一段注释性描述。
  • -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
  • -g 用户组 指定用户所属的用户组。
  • -G 用户组,用户组 指定用户所属的附加组。
  • -s Shell文件 指定用户的登录Shell。
  • -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
  • 用户名 指定新账号的登录名

  • 1.添加nginx用户

[root@localhost ~]# groupadd nginx
[root@localhost ~]# useradd -c nginx -g nginx nginx -s /sbin/nologin
  • 2.添加网站专用wwwroot用户
[root@localhost ~]# groupadd www
[root@localhost ~]# useradd -c www -g www www -s /sbin/nologin

安装MARIADB

  • 1.使用yum命令安装mariaDB
[root@localhost]# yum -y install mariadb mariadb-server
  • 2.设置开机启动
[root@localhost ~]# systemctl enable mariadb
  • 3.启动MySQL服务
[root@localhost ~]# systemctl start mariadb
  • 4.MariaDB的相关简单配置
[root@localhost ~]# mysql_secure_installation
# 首先是设置密码,会提示先输入密码,初次运行直接回车
Enter current password for root (enter for none):
# 设置密码,是否设置root用户密码,输入y并回车或直接回车
Set root password? [Y/n]
# 设置root用户的密码
New password:
# 再输入一次你设置的密码
Re-enter new password:
# 其他配置
# 是否删除匿名用户,回车
Remove anonymous users? [Y/n]
# 是否禁止root远程登录,回车
Disallow root login remotely? [Y/n]
# 是否删除test数据库,回车
Remove test database and access to it? [Y/n]
# 是否重新加载权限表,回车
Reload privilege tables now? [Y/n]
# 初始化MariaDB完成,接下来测试登录
# mysql -uroot -proot密码
  • 5.授权远程用户登录
# 允许的IP地址,%为任意地址
mysql&gt; GRANT ALL PRIVILEGES ON *.* TO 'root'@'IP地址' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
mysql&gt; FLUSH PRIVILEGES;

安装PHP

  • 1.安装php
[root@localhost ~]# yum -y install php php-devel
  • 2.安装php扩展
[root@localhost ~]# yum -y install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
  • 3.安装php-fpm
# 安装 php-fpm
[root@localhost ~]# yum -y install php-fpm
# 设置fpm开机自启动
[root@localhost ~]# systemctl enable php-fpm
# 启动fpm
[root@localhost ~]# systemctl start php-fpm
# php-fpm配置文件路径/etc/php-fpm.conf

安装NGINX

  • 1.下载nginx
# 切换到src目录
[root@localhost ~]# cd /usr/local/src
# 下载nginx源码包
[root@localhost src]# wget http://nginx.org/download/nginx-1.12.0.tar.gz
# 解压并切换到nginx目录
[root@localhost src]# tar zxvf nginx-1.12.0.tar.gz
[root@localhost src]# cd nginx-1.12.0
# 配置编译选项
[root@localhost nginx-1.12.0]# ./configure --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-pcre
# 安装
[root@localhost nginx-1.12.0]# make &amp; make install
  • 2.启动关闭nginx
# 常规启动、关闭和重启,不会改变启动时指定的配置文件
[root@localhost ~]# /usr/local/nginx/sbin/nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
# 设置开机自启动
[root@localhost ~]# vim /lib/systemd/system/nginx.service
# 写入以下内容
# --------------------------------------------------
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
# --------------------------------------------------
[root@localhost ~]# systemctl enable nginx
  • 3.添加php支持
# 修改nginx.conf,去掉以下代码的注释
        location ~ .php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }
# 重启nginx
[root@localhost]# /usr/local/nginx/sbin/nginx -s reload
  • 4.解决访问php提示File not found.
# 修改nginx配置文件
# 源文件
fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
# 修改后的文件,将 /scripts 修改为$document_root
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

centos7配置MariaDB允许指定IP远程连接数据库

前提

公司数据库没有版本控制,这个就相当坑爹了,问以前的技术,就是在本地建一个表,然后导入到线上,WTF。目前就只能临时开启远程连接数据了,后面在使用版本控制

防火墙

centos7 之前的防火墙是不一样的,比如你要添加3306端口:

 ## 全部
 iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

 ## 部分ipiptables
 iptables -A INPUT -p tcp -s 138.111.21.11 -dport 3306 -j ACCEP

 service iptables save

 service iptables restart

 ## 查看 iptables
 iptables -L -n

但这个在centos7 就不好使,查看文档才知道centos7 使用了增强版firewall

 firewall-cmd --zone=public --permanent --add-port=3306/tcp
  1、firwall-cmd:是Linux提供的操作firewall的一个工具;
  2、--permanent:表示设置为持久;
  3、--add-port:标识添加的端口;
  4、--zone=public:指定的zone为public;

当然如果不太习惯使用命令,我们可以直接改配置文件

MySQL

进入etc/firewalld/zone中,修改public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas.</description>
  <rule family="ipv4">
    <source address="122.10.70.234"/>
    <port protocol="udp" port="514"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="123.60.255.14"/>
    <port protocol="tcp" port="10050-10051"/>
    <accept/>
  </rule>
 <rule family="ipv4">
    <source address="192.249.87.114"/> 放通指定ip,指定端口、协议
    <port protocol="tcp" port="80"/>
    <accept/>
  </rule>
<rule family="ipv4"> 放通任意ip访问服务器的9527端口
    <port protocol="tcp" port="9527"/>
    <accept/>
  </rule>
</zone>

上述配置文件可以看出:

1、添加需要的规则,开放通源ip为122.10.70.234,端口514,协议tcp;
2、开放通源ip为123.60.255.14,端口10050-10051,协议tcp;/3、开放通源ip为任意,端口9527,协议

firewall 常用命令

# 重启
service firewalld restart 

# 开启
service firewalld start 

# 关闭
service firewalld stop

# 查看firewall 服务状态
 systemctl status firewall

# 查看防火墙
 firewall-cmd  --list-all    

MySQL

开启服务器3306对外开放后,还需要设置数据库用户授权

MariaDB 开启远程连接

在数据库mysql 中的user表中可以看到默认是只能本地连接的,所有可以添加一个用户

# 针对ip
create user 'root'@'192.168.10.10' identified by 'password';

#全部
 create user 'root'@'%' identified by 'password';

建议还是针对于ip开放吧,不要全部开放

授权用户:

 # 给用户最大权限
  grant all privileges on *.* to 'root'@'%' identified by 'password';

 # 给部分权限(test 数据库)

  grant all privileges on test.* to 'root'@'%' identified by 'password' with grant option;

# 刷新权限表

 flush privileges;

# show grants for 'root'@'localhost';

MySQL

接下来就是可以本地连接了

参考文章:

  • 防火墙:
    http://blog.csdn.net/xlgen157387/article/details/52672988

    http://blog.sina.com.cn/s/blog_4c197d4201017rgl.html

  • 用户授权:
    http://www.cnblogs.com/xujishou/p/6306765.html

CentOS安装配置MariaDB Galera Cluster集群

MariaDB Galera Cluster是MariaDB的同步多主集群。它仅在Linux上可用,并且仅支持xtraDB/InnoDB存储引擎,对MyISAM也有一定的支持(https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_replicate_myisam),

特征:

  • 同步复制
  • 多主可同时读写 Active-active multi-master
  • 任何节点成员可读写
  • 自动成员控制,故障节点从群集中删除
  • 节点可自动加入(基于配置)
  • 真正的并行复制,在行级复制
  • 使用者在客户端连接,在使用和感官上和mysql一样

优点:

  • 没有从库延迟
  • 不会丢失事物
  • 读写扩展高(后续文章会加入读写分离)
  • 多主,不存在slave 延迟,也不以来binlog
  • 具有同步复制,故障切换和重新同步的高可用性解决方案
  • 所有服务器都具有最新数据(无滞后)
  • 跨数据中心的高可用性

它依赖于wsrep API(https://launchpad.net/wsrep):

wsrep API定义了一组应用程序回调和复制库调用,以实现事务数据库和类似应用程序的同步写入复制。在从应用程序详细信息中抽象和分离复制实现。虽然此接口的主要目标是基于认证的多主机复制,但同样适用于异步和同步主/从复制。

它的复制过程也是基于认证的,基于WSREP API,大量的配置参考:

https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_replicate_myisam

Galera可以利用四个端口:

  • 3306 数据库端口
  • 4567 对于Galera Cluster复制,组播复制在此端口上同时使用UDP传输和TCP。
  • 4568 增量数据同步IST,节点下线、重启后使用该端口,增量同步数据,增量状态转移。
  • 4444 镜像数据传输SST,集群数据同步端口,全量同步,新节点加入时起作用

三台机器:10.0.1.49,10.10.240.113,10.0.1.61
其实用起来可以是这样的:

MySQL

前面使用LVS等进行调度,当然在中间可以使用中间件进行读写分离

I. yum安装选择

https://downloads.mariadb.org/mariadb/repositories/
centos7 yum如下:

[root@LinuxEA ~]# cat > /etc/yum.repos.d/mariadb.repo << EOF
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
[root@LinuxEA ~]# yum install socat MariaDB-Galera-server MariaDB-client rsync galera

其他版本tar包安装下载地址:
https://downloads.mariadb.org/mariadb-galera/+releases/

本次使用二进制安装:
mariadb-galera安装:http://download.nus.edu.sg/mirror/mariadb//mariadb-galera-10.0.30/bintar-linux-x86_64/mariadb-galera-10.0.30-linux-x86_64.tar.gz

galera安装:http://releases.galeracluster.com/centos/7/x86_64/galera-3-25.3.20-2.el7.x86_64.rpm

防火墙添加:

iptables -I INPUT 4 -p tcp -m tcp -m state --state NEW -m multiport --dports 3306,4444,4567,4568 -m comment --comment &quot;mariadb-galera&quot; -j ACCEPT

其他依赖包:

yum install socat MariaDB-client rsync galera lsof

文档参考

  • 编译参考:https://mariadb.com/kb/en/mariadb/installating-galera-from-source/
  • 理解参考:https://www.percona.com/blog/2014/09/01/galera-replication-how-to-recover-a-pxc-cluster/
  • 其他教程:https://severalnines.com/resources/tutorials/galera-cluster-mysql-tutorial
  • http://galeracluster.com/products/technology/
  • Galera Cluster 局限:https://mariadb.com/kb/en/mariadb/mariadb-galera-cluster-known-limitations/

II. node1

解压

[root@LinuxEA /data]# tar xf mariadb-galera-10.0.30-linux-x86_64.tar.gz -C /usr/local/
[root@LinuxEA /data]# cd /usr/local/
[root@LinuxEA /usr/local]# ln -s mariadb-galera-10.0.30-linux-x86_64/ mysql

安装

[root@LinuxEA /usr/local]# useradd mysql -s /sbin/nologin -M
[root@LinuxEA /usr/local]# mkdir -p /data/mysql 
[root@LinuxEA /usr/local]# chown -R mysql.mysql  /data/mysql 
[root@LinuxEA /usr/local]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql

复制启动脚本

[root@LinuxEA /usr/local]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@LinuxEA /usr/local]# systemctl enable mysqld
mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld on
[root@LinuxEA /usr/local]# 

安装jemalloc内存分配器

[root@LinuxEA /]# wget https://github.com/jemalloc/jemalloc/releases/download/4.2.1/jemalloc-4.2.1.tar.bz2
[root@LinuxEA /]# yum install -y gcc lsof
[root@LinuxEA /]# tar xf jemalloc-4.2.1.tar.bz2
[root@LinuxEA /]# cd jemalloc-4.2.1/
[root@LinuxEA /jemalloc-4.2.1]# ./configure
[root@LinuxEA /jemalloc-4.2.1]# make 
[root@LinuxEA /jemalloc-4.2.1]# make install

授权用户:

grant all privileges on *.* to 'tb'@'%' identified by 'password';
flush privileges;

III. 配置文件部分说明:

  1. wsrep_cluster_address=gcomm:// 如下:
    这条命令,gcomm://是一个特殊的参数,在启动第一台数据库时需要使用这个参数来启动,否则会启动失败

  2. wsrep_cluster_address=”gcomm://10.0.1.49,10.10.240.113,10.0.1.61″如下:
    gcomm://后的是集群成员的ip地址

  3. wsrep_sst_auth=tb:password如下:这里的sst需要安装lsof依赖包
    这个参数就是我们之前设定的用来同步的用户名和密码

  4. wsrep_node_name=’node1′ 如下:
    当前node

  5. wsrep_node_address=’10.0.1.49′ 如下:
    当前node ip地址

IV. 部分配置文件如下

galera

[galera]
##https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-system-index.html
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
#wsrep_cluster_address=&quot;gcomm://&quot;
wsrep_cluster_address=&quot;gcomm://10.0.1.49,10.10.240.113,10.0.1.61&quot;
wsrep_cluster_name='cluster'
wsrep_node_address='10.0.1.49'
wsrep_node_name='node1'
#wsrep_replicate_myisam=1
####wsrep_slave_threads = 8
#wsrep_slave_threads = 16
##wsrep_provider_options=&quot;gcs.fc_limit=512&quot;
#wsrep_provider_options=&quot;gcache.page_size=128M;gcache.size=2G;gcs.fc_limit=512;gcs.fc_factor=0.9;evs.send_window=256;evs.user_send_window=128;cert.log_conflicts=yes&quot;
##wsrep_notify_cmd='/data/galeranotify/galeranotify.py'
#wsrep_log_conflicts=1
#wsrep_forced_binlog_format=ROW
#wsrep_drupal_282555_workaround=1
#wsrep_max_ws_size=2147483647
##wsrep_dirty_reads=0 #当值是1的时候这个节点是只读节点
##wsrep_sst_method=[mysqldump|xtrabackup|xtrabackup-v2|rsync|rsync_wan]
#wsrep_sst_method=xtrabackup-v2
wsrep_sst_method=rsync
wsrep_sst_auth=tb:password

V. 启动第一台:

这里需要注意的是,第一次启动使用–wsrep-new-cluster,如果此时集群中这台故障,需要修改配置文件打开:wsrep_cluster_address=”gcomm://10.0.1.49,10.10.240.113,10.0.1.61″这一项,如过其他两天数据已经和这台不同步,这需要删除目录数据后进行同步恢复并加入集群

[root@LinuxEA /data/mysql]# /etc/init.d/mysqld start --wsrep-new-cluster

做一些简单的优化:

DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.db WHERE Db LIKE 'test%';
DROP DATABASE test;
UPDATE mysql.user SET password = password('abc123') WHERE user = 'root';

VI. 启动第二台:

第二台的mariadb安装完成后,直接删掉/data/mysql下的文件,从10.0.1.49同步

[root@LinuxEA-2 /data/mysql]# rm -rf *
[root@LinuxEA-2 /data/mysql]# /etc/init.d/mysqld start
Starting MySQL.170524 17:43:41 mysqld_safe Adding '/usr/local/lib/libjemalloc.so' to LD_PRELOAD for mysqld
170524 17:43:41 mysqld_safe Logging to '/data/mysql/mysql-error.log'.
170524 17:43:41 mysqld_safe Starting mysqld daemon with databases from /data/mysql
..........SST in progress, setting sleep higher.... SUCCESS! 

部分配置文件:

[galera]
##https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-system-index.html
wsrep_on=ON
wsrep_cluster_address=&quot;gcomm://10.0.1.49,10.10.240.113,10.0.1.61&quot;
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='cluster'
wsrep_node_address='10.0.1.61'
wsrep_node_name='node2'
#wsrep_replicate_myisam=1
#wsrep_node_name='node1'
#wsrep_replicate_myisam=1
####wsrep_slave_threads = 8
#wsrep_slave_threads = 16
##wsrep_provider_options=&quot;gcs.fc_limit=512&quot;
#wsrep_provider_options=&quot;gcache.page_size=128M;gcache.size=2G;gcs.fc_limit=512;gcs.fc_factor=0.9;evs.send_window=256;evs.user_send_window=128;cert.log_conflicts=yes&quot;
##wsrep_notify_cmd='/data/galeranotify/galeranotify.py'
#wsrep_log_conflicts=1
#wsrep_forced_binlog_format=ROW
#wsrep_drupal_282555_workaround=1
#wsrep_max_ws_size=2147483647
##wsrep_dirty_reads=0 #当值是1的时候这个节点是只读节点
##wsrep_sst_method=[mysqldump|xtrabackup|xtrabackup-v2|rsync|rsync_wan]
#wsrep_sst_method=xtrabackup-v2
wsrep_sst_method=rsync
wsrep_sst_auth=tb:password

VII. 启动第三台

同样删除/data/mysql下的文件,从10.0.1.49同步

[root@LinuxEA-3 /data/mysql]# rm -rf *
[root@LinuxEA-3 /data/mysql]# /etc/init.d/mysqld start
Starting MySQL.170524 18:58:34 mysqld_safe Adding '/usr/local/lib/libjemalloc.so' to LD_PRELOAD for mysqld
170524 18:58:34 mysqld_safe Logging to '/data/mysql/mysql-error.log'.
170524 18:58:34 mysqld_safe Starting mysqld daemon with databases from /data/mysql
.....SST in progress, setting sleep higher.. SUCCESS! 
[root@LinuxEA-3 /data/mysql]# 

部分配置文件:

[galera]
##https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-system-index.html
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=&quot;gcomm://10.0.1.49,10.10.240.113,10.0.1.49&quot;
#wsrep_cluster_address=&quot;gcomm://&quot;
wsrep_cluster_name='cluster'
wsrep_node_address='10.10.240.113'
wsrep_node_name='node3'
#wsrep_replicate_myisam=1
####wsrep_slave_threads = 8
#wsrep_slave_threads = 16
##wsrep_provider_options=&quot;gcs.fc_limit=512&quot;
#wsrep_provider_options=&quot;gcache.page_size=128M;gcache.size=2G;gcs.fc_limit=512;gcs.fc_factor=0.9;evs.send_window=256;evs.user_send_window=128;cert.log_conflicts=yes&quot;
##wsrep_notify_cmd='/data/galeranotify/galeranotify.py'
#wsrep_log_conflicts=1
#wsrep_forced_binlog_format=ROW
#wsrep_drupal_282555_workaround=1
#wsrep_max_ws_size=2147483647
##wsrep_dirty_reads=0 #当值是1的时候这个节点是只读节点
##wsrep_sst_method=[mysqldump|xtrabackup|xtrabackup-v2|rsync|rsync_wan]
#wsrep_sst_method=xtrabackup-v2
wsrep_sst_method=rsync
wsrep_sst_auth=tb:password

三台启动完成状态:

[root@LinuxEA /data/mysql]# mysql -e &quot;SHOW STATUS LIKE 'wsrep_cluster_size';&quot;
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

Debian安装配置MariaDB Server

MySQL

介绍

这里我们用 MariaDB 代替 MySQL,MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可 MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。

上面的都是书面语,我觉得 MariaDB 哪里好呢,首先 MySQL 分 CE(开发版)和 EE(企业版)区分了一部分用户,而且毕竟是 Orcale 的软件了,后期发展难免会有更大的区分。MariaDB 是完全由开源社区维护的,而且在功能开发上也更开放,光说国内,阿里云就有为其赞助了一位开发者——彭立勋,帮助完善复制功能并将 AliSQL 的优良特性合并入 MariaDB,最近腾讯云也赞助了一位开发者 —— 程斌(音译),帮助完善InnoDB 功能,并合并 TXSQL。可见 MariaDB 的开发生态其实非常棒,很活跃,一片生机勃勃。

MariaDB、MySQL 这样的数据库编译非常耗时而且编译很容易出错,所以使用编译好的版本无疑是最好的,设置页非常的方便。

安装

MariaDB 的软件源由官方提供,程序的质量和安全绝对是毋庸置疑的。

本教程适用于:

Debian 8 (Jessie) 支持安装 10.0~最新
Debian 9 (stretch) 支持安装 10.1~最新

教程以 10.2 版本为例,其他版本只需将下面的 10.2 修改为 10.1 10.0 即可

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8add-apt-repository 'deb [arch=amd64] http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.2/debian stretch main'

apt update
apt install mariadb-server

MariaDB 设置密码

MySQL

安装过程中,这里会提示设置数据库 Root 密码,需要连续输入两次。

设置

输入下面的命令,关闭一些不安全的设置:

mysql_secure_installation

首先输入密码,提出修改米啊嘛不修改,然后一路 y 即可。

  • 基本介绍:
    Enter current password for root (enter for none):
  • 解释:输入当前 root 用户密码,默认为空,直接回车。
    Set root password? [Y/n] y
  • 解释:要设置 root 密码吗?输入 y 表示愿意。
    Remove anonymous users? [Y/n] y
  • 解释:要移除掉匿名用户吗?输入 y 表示愿意。
    Disallow root login remotely? [Y/n] y
  • 解释:不想让 root 远程登陆吗?输入 y 表示愿意。
    Remove test database and access to it? [Y/n] y
  • 解释:要去掉 test 数据库吗?输入 y 表示愿意。
    Reload privilege tables now? [Y/n] y
  • 解释:想要重新加载权限吗?输入 y 表示愿意。

管理

systemctl restart mysql #重启
systemctl start mysql #启动
systemctl stop mysql #关闭
systemctl status mysql #检查状态

更新

运行下面的命令系统就会更新所有可以更新的软件包括 MariaDB

apt update
apt upgrade -y

配置MariaDB允许客户端远程连接

1、登陆mysql数据库

mysql -u root -p

查看user表

mysql> use mysql;
Database changed
mysql> select host,user,password from user;
+--------------+------+-------------------------------------------+
| host | user | password |
+--------------+------+-------------------------------------------+
| localhost | root | A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | A731AEBFB621E354CD41BAF207D884A609E81F5E |
+--------------+------+-------------------------------------------+
2 rows in set (0.00 sec)

可以看到在user表中已创建的root用户。host字段表示登录的主机,其值可以用IP,也可用主机名,

(1)有时想用本地IP登录,那么可以将以上的Host值改为自己的Ip即可

2、实现远程连接(授权法)

将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%。

update user set host = ’%’ where user = ’root’;

将权限改为ALL PRIVILEGES

mysql> use mysql;
Database changed
mysql> grant all privileges on . to root@'%' identified by "root";
Query OK, 0 rows affected (0.00 sec)
mysql>
+--------------+------+-------------------------------------------+
| host | user | password |
+--------------+------+-------------------------------------------+
| localhost | root | A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | A731AEBFB621E354CD41BAF207D884A609E81F5E |
| % | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+--------------+------+-------------------------------------------+
3 rows in set (0.00 sec)

这样机器就可以以用户名root密码root远程访问该机器上的MySql.

3、实现远程连接(改表法)

use mysql;
update user set host = '%' where user = 'root';

这样在远端就可以通过root用户访问Mysql.

CentOS7 YUM安装MariaDB

https://downloads.mariadb.org/mariadb/repositories/#mirror=tuna&distro=CentOS&distro_release=centos7-amd64–centos7&version=10.2

1. 配置Yum安装库

Here is your custom MariaDB YUM repository entry for CentOS. Copy and paste it into a file under /etc/yum.repos.d/ (we suggest naming the file MariaDB.repo or something similar).

#MariaDB 10.2 CentOS repository list - created 2017-06-12 03:20 UTC
#http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-
gpgcheck=1

2.执行yum安装

After the file is in place, install MariaDB with:

sudo yum install MariaDB-server MariaDB-client

3.启动MariaDB

systemctl start mariadb

4.设置root用户密码

mysqladmin -u root -p password newpassword

后面的 newpassword是要设置的密码

在Ubuntu 16.04 LTS安装WordPress Nginx MariaDB HHVM

安装条件

假设你机器已经满足:
Ubuntu 16.04 Server采用64位架构,因为HHVM仅在64位上运行。
以root/sudo进入系统

安装Nginx

Nginx Web服务器在Ubuntu存储库中可用。 您可以使用apt命令安装它:

  1. apt-get update
  2. apt-get install nginx

安装完成后启动Nginx。

  1. systemctl start nginx

现在用你的浏览器测试,打开服务器IP:http://192.168.1.108/。 将URL中的IP替换为您自己的IP。
Nginx

安装配置MariaDB

在本教程中,我将安装MariaDB作为MySQL的替代,以利用其更好的性能。 MariaDB是由MySQL开发人员Monty Widenius维护的MySQL的一个分支。
使用apt-get命令安装MariaDB:

  1. apt-get install mariadb-client mariadb-server

现在你可以启动MariaDB(MariaDB服务名为mysql):

  1. systemctl start mysql

当MariaDB运行时,设置MariaDB root密码以保护数据库:

  1. mysql_secure_installation

Enter current password for root (enter for none): PRESS ENTER

Set root password? [Y/n] Y
ENTER YOUR PASSWORD

Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
MariaDB的root密码已设置,您可以使用密码登录MariaDB终端。

  1. mysql -u root -p
  2.  
  3. TYPE YOUR PASSWORD

现在创建一个名为wordpressdb的新数据库,并为WordPress安装使用名称为wpuser的新用户。 你可以使用下面的命令。 请使用安全密码替换“wpuser @”,该密码将用于新的WordPress数据库的访问凭据。

  1. create database wordpressdb;
  2. create user wpuser@localhost identified by ‘wpuser@’;
  3. grant all privileges on wordpressdb.* to wpuser@localhost identified by ‘wpuser@’;
  4. flush privileges;
  5. q

Nginx

安装配置HHVM

将HHVM存储库添加到您的Ubuntu存储库文件/etc/apt/sources.list并更新存储库:

  1. wget -O – http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add –
  2. echo deb http://dl.hhvm.com/ubuntu xenial main | sudo tee /etc/apt/sources.list.d/hhvm.list
  3. apt-get update

现在让我们安装HHVM:

  1. apt-get install -y hhvm

安装完成后,配置Nginx Web服务器使用HHVM:

  1. /usr/share/hhvm/install_fastcgi.sh

要在系统引导时自动启动HHVM,请运行以下命令:

  1. update-rc.d hhvm defaults

我们使用HHVM替代/usr/bin/php,即使您安装了php-cli:

  1. /usr/bin/update-alternatives –install /usr/bin/php php /usr/bin/hhvm 60

现在启动HHVM:

  1. systemctl start hhvm

现在是测试HHVM的时候了,我将在浏览器和服务器控制台/终端上测试它。
在/var/www/html/目录中创建名为info.php的新文件:

  1. cd /var/www/html/
  2. nano info.php

并添加下面的PHP代码:

  1. <?php
  2. phpinfo();
  3. ?>

现在使用vim编辑nginx虚拟主机文件/etc/nginx/sites-available/default,并添加index.php:

  1. vim /etc/nginx/sites-available/default

添加新的index.php:

  1. index index.php index.html index.htm index.nginx-debian.html;

保存并退出。
Nginx
然后用浏览器访问:http://192.168.1.108/info.php。 如果您可以在您的网页中看到HHVm工作正常。
Nginx
最后,在服务器控制台/终端中测试HHVM,键入以下命令:

  1. php info.php
  2. php -v

Nginx
第一个命令应显示单词“HipHop”,第二个命令为HHVM版本。

安装Wordpress

下载WordPress并解压缩:

  1. cd /var/www/html/
  2. wget wordpress.org/latest.zip
  3. unzip latest.zip

WordPress已经提取到“wordpress”目录中,您必须将所有WordPress文件和目录移动到/var/www/html/,您可以使用以下命令执行此操作:

  1. cd /var/www/html/
  2. mv wordpress/* .
  3. rm -rf wordpress/

现在将WordPress文件的所有者更改为用户和组www-data,通常www-data用户和组拥有/var/www/html/目录下的所有文件。 运行这些命令以更改文件和目录所有权:

  1. find . -type d -exec chown www-data:www-data {} ;
  2. find . -type f -exec chown www-data:www-data {} ;
  1. 然后将文件wp-config-sample.php重命名为wp-config.php,并编辑该文件以设置在数据库设置期间创建的数据库名称,数据库用户和密码。
  2. mv wp-config-sample.php wp-config.php
  3. nano wp-config.php
  1. DB_NAME = wordpressdb
  2. DB_USER = wpuser
  3. DB_PASSWORD = wpuser@

Nginx
然后重启Nginx:

  1. systemctl restart nginx

当Nginx重新启动,尝试访问服务器IP:http://192.168.1.108/,您将被重定向到WordPress安装。