CentOS 安装配置MariaDB
MariaDB 数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。
开发这个分支的原因是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。
MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB(InnoDB的变体),分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。
MariaDB 官方网站: https://mariadb.org
MariaDB 官方安装: https://mariadb.com/kb/en/mariadb/yum/
MariaDB CentOS安装: https://downloads.mariadb.org/mariadb/repositories/ (推荐)
1. 查找安装源
yum list | grep -i MariaDB
# rpm -qa | grep -i MariaDB MariaDB-connect-engine-10.3.9-1.el7.centos.x86_64 MariaDB-devel-10.3.9-1.el7.centos.x86_64 MariaDB-compat-10.3.9-1.el7.centos.x86_64 MariaDB-tokudb-engine-10.3.9-1.el7.centos.x86_64 MariaDB-oqgraph-engine-10.3.9-1.el7.centos.x86_64 MariaDB-server-10.3.9-1.el7.centos.x86_64 MariaDB-rocksdb-engine-10.3.9-1.el7.centos.x86_64 MariaDB-gssapi-server-10.3.9-1.el7.centos.x86_64 MariaDB-backup-10.3.9-1.el7.centos.x86_64 MariaDB-common-10.3.9-1.el7.centos.x86_64 MariaDB-cracklib-password-check-10.3.9-1.el7.centos.x86_64 MariaDB-aws-key-management-10.3.9-1.el7.centos.x86_64 MariaDB-shared-10.3.9-1.el7.centos.x86_64 MariaDB-client-10.3.9-1.el7.centos.x86_64 MariaDB-cassandra-engine-10.3.9-1.el7.centos.x86_64 MariaDB-test-10.3.9-1.el7.centos.x86_64
2. 清空缓存
yum -y remove MariaDB-server MariaDB-client MariaDB-devel
yum clean all
yum makecache
3. 查看已安装
rpm -qa | grep MariaDB
使用 yum 安装的权限要求是 root 用户,如果不是则需要在shell命令之前加上 sudo,
或者 su root 切换到 super 管理员进行操作,并可能需要输入密码。
1. 添加 yum 数据源
CentOS7系统更换YUM Repo源
备份原镜像
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
sudo mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
阿里云的Base源和EPEL源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
腾讯云的Base源和EPEL源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
163的Base源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
建议命名为 MariaDB.repo 类似的名字:
cd /etc/yum.repos.d/ vim /etc/yum.repos.d/MariaDB.repo
然后(CentOS 6.x),添加写入如下内容:
# /etc/yum.repos.d/MariaDB.repo # MariaDB 5.5 CentOS repository list - created 2013-12-23 10:27 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
或者(CentOS 7)
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
该文件的内容是参考官网,并从官网上生成的,设置安装源仓库的 具体的地址为:
https://downloads.mariadb.org/mariadb/repositories/
选择好操作系统版本(例如CentOS)之后既可以查看,其他操作系统的安装源也可以在此处查看并设置。
如果服务器不支持https协议,或者gpgkey 保错,确保没问题的话,可以将 gpgcheck=1 修改为 gpgcheck=0,则不进行校验.
yum源的生效:清理和生成缓存
sudo yum clean all
sudo yum makecache
2. 安装数据库
# yum remove MariaDB-server MariaDB-client yum -y install MariaDB-client MariaDB-server MariaDB-devel
如果要删除旧的数据库可以使用remove, 参数 -y 是确认,默认不用提示输入y。
3. 启动数据库
如果不用进行其他的操作,则现在就可以直接启动数据库,并进行测试了。
# 查看mysql状态;关闭数据库 # service mysql status # service mysql stop # 启动数据库 service mysql start
MariaDB 安装后,默认启动命令为mysql,为了和MySQL保持一致,可以在 /etc/init.d/mysql 修改为 /etc/init.d/mysqld,修改命令如下:
cp /etc/init.d/mysql /etc/init.d/mysqld
4. 修改root密码
# 修改root密码 mysqladmin -u root password 'root'
因为安装好以后的root密码是空,所以需要设置
如果是测试服务器,那么你可以直接使用root,不重要的密码很多时候可以设置为和用户名一致,以免忘记了又想不起来。
如果是重要的服务器,请使用复杂密码,例如邮箱,各种自由组合的规则的字符等。
修改端口号
CentOS 7 MariaDB 的配置文件,默认路径为:/etc/my.cnf 和 /etc/my.cnf.d/
# ll /etc/my.cnf -rw-r--r-- 1 root root 202 Aug 17 18:05 /etc/my.cnf # # # ll /etc/my.cnf.d/ total 12 -rw-r--r-- 1 root root 763 Aug 17 18:05 enable_encryption.preset -rw-r--r-- 1 root root 232 Aug 17 18:05 mysql-clients.cnf -rw-r--r-- 1 root root 1164 Sep 6 16:49 server.cnf
修改文件
vim /etc/my.cnf.d/server.cnf
添加如下配置
# this is only for the mysqld standalone daemon
[mysqld]
port = 33806
max_allowed_packet=12800M
max_connections=2048
max_connect_errors=1000
重启 MySQL 服务,使其生效
/etc/init.d/mysql restart
5. 登录数据库
mysql -u root -p
如果是本机,那可以直接使用上面的命令登录,当然,需要输入密码. 如果是其他机器,那么可能需要如下的形式:
mysql -h 127.0.0.1 -P 33806 -u root -p
6. 简单SQL测试
> -- 查看MySQL的状态 status; -- 显示支持的引擎 show engines; -- 显示所有数据库 show databases; -- 切换数据库上下文,即设置当前会话的默认数据库 use test; -- 显示本数据库所有的表 show tables; -- 创建一个表 CREATE TABLE t_test ( id int(11) UNSIGNED NOT NULL AUTO_INCREMENT, userId char(36), lastLoginTime timestamp, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 插入测试数据 insert into t_test(userId) values ('admin') ,('haha') ; -- 简单查询 select * from t_test; select id,userId from t_test where userId='admin' ;
7. 修改数据存放目录
mysql, MariaDB 的默认数据存放在 /var/lib/mysql/ 目录下。
如果不想放到此处,或者是想要程序和数据分离,或者是磁盘原因需要切换到其他路径,则可以通过修改 datadir系统变量来达成目的.
# 停止数据库 service mysql stop # 创建目录,假设没有的话 mkdir /usr/local/ieternal/mysql_data # 拷贝默认数据库到新的位置 # -a 命令是将文件属性一起拷贝,否则各种问题 cp -a /var/lib/mysql /usr/local/ieternal/mysql_data # 备份原来的数据 cp -a /etc/my.cnf /etc/my.cnf_original # 其实查看 /etc/my.cnf 文件可以发现 # MariaDB 的此文件之中只有一个包含语句 # 所以需要修改的配置文件为 /etc/my.cnf.d/server.cnf cp /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf_original vim /etc/my.cnf.d/server.cnf
然后 按 i 进入编辑模式,可以插入相关内容.使用键盘的上下左右键可以移动光标, 编辑完成以后,按 ESC 退出编辑模式(进入命令模式), 然后输入命令:wq 保存并退出
# 在文件的 mysqld 节下添加内容 [mysqld] datadir=/usr/local/ieternal/mysql_data/mysql socket=/var/lib/mysql/mysql.sock #default-character-set=utf8 character_set_server=utf8 slow_query_log=on slow_query_log_file=/usr/local/ieternal/mysql_data/slow_query_log.log long_query_time=2
其中,也只有 datadir 和 socket 比较重要; 而 default-character-set 是 mysql 自己认识的,而 mariadb5.5 就不认识,相当于变成了 character_set_server
7.1 创建慢查询日志文件
既然上面指定了慢查询日志文件,我后来看了下MariaDB的err日志,发现MariaDB不会自己创建该文件,所以我们需要自己创建,并修改相应的文件权限(比如 mysql 采用 mysql用户,可能我们使用 root用户创建的文件,此时要求慢查询日志文件对mysql用户可读可写就行。
touch /usr/local/ieternal/mysql_data/slow_query_log.log chmod 666 /usr/local/ieternal/mysql_data/slow_query_log.log
然后重新启动MySQL
service mysql start
配置主服务器 master
主从复制包含两个步骤: 1) 在 master 主服务器(组)上的设置; 2) 在 slave 从属服务器(组)上的设置.
- 如果没有启用,则需要 激活二进制日志.
- 给 master 设置唯一的 server_id ,所有的 slave 从属服务器也要设置 server_id; server_id值可以是整数型的数字(1 ~ 2^31-1), 在同一个复制组(replicating group)中的每台服务器的server_id都必须是唯一的.
- slave 从属服务器需要有连接并从master复制的权限. 通常是为每一台slave 创建一个单独的用户(user),并且只授予复制的权限(REPLICATION SLAVE 权限).
示例
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_host' IDENTIFIED BY 'bigs3cret'; FLUSH PRIVILEGES;
需要注意,有一些系统配置选项可能会影响主从复制,查看下面的变量以避免发生问题:
skip-networking,如果 "skip-networking=1",则服务器将限制只能由localhost连接,阻止其他机器远程连到此服务器上。
bind_address,类似地,如果 服务器只监听 127.0.0.1(localhost)的TCP/IP连接,则远程的 slave也不能连接到此服务器
配置从属服务器 slave
给 slave 指定唯一的 server_id. 所有服务器,不管是主服务器,还是从服务器,都要设置 server_id. server_id值可以是整数型的数字(1 ~ 2^31-1), 在同一个复制组(replicating group)中的每台(/个)服务器的server_id都必须是唯一的.
要让此配置项生效,需要重新启动服务.
获取 master 的二进制日志坐标
当查看当前 二进制日志 的position(位置)时,需要阻止任何数据库的提交.可以通过此坐标点告诉slave服务器从哪一个特定的点开始复制。
- 在 master上执行命令 "FLUSH TABLES WITH READ LOCK",以强制写入日志,并锁定所有的表 —— 在此期间不能关闭会话,一关闭会话就会释放锁.
- 通过运行 "SHOW MASTER STATUS" 来获取二进制日志的当前位置信息.
- 记下 File 以及 Position 信息. 如果刚刚才开启了二进制日志功能,则为空.
- 然后,开始从master 拷贝 data 到 slave,请参考: Backup, Restore and Import
- 将数据从master拷贝到slave以后,可以执行"UNLOCK TABLES;"释放master上的锁。
示例如下:
-- SHOW MASTER STATUS; +--------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+------------------+ | mariadb-bin.000096 | 568 | | | +--------------------+----------+--------------+------------------+ --
启动从属服务器 Slave
数据导入以后,就可以启动复制功能了。 通过执行 "CHANGE MASTER TO" 来开始.
确保 "MASTER_LOG_FILE",以及 "MASTER_LOG_POS" 与master早时候记下的信息一致.
示例如下:
CHANGE MASTER TO MASTER_HOST='master.domain.com', MASTER_USER='replication_user', MASTER_PASSWORD='bigs3cret', MASTER_PORT=33806, MASTER_LOG_FILE='mariadb-bin.000096', MASTER_LOG_POS=568, MASTER_CONNECT_RETRY=10;
然后,启动slave
START SLAVE;
查看 slave状态:
SHOW SLAVE STATUS;
如果需要暂停 slave 复制,则可使用SQL :
stop slave;
说明: 假如停止 MYSQL(MariaDB),然后重新启动,则 Slave会随mysqld 自动启动.所以不需要担心日常的重启等操作.
[root@AY13 mysql]# service mysql stop Shutting down MySQL. SUCCESS! [root@AY13 mysql]# service mysql start Starting MySQL.. SUCCESS!
更多问题,欢迎加入QQ群 《脚本娃娃-桃花岛》进行讨论,口令: Ext
要启用二进制日志功能,可以使用 "--log-bin[=name]"选项来启动服务器.
如果文件名中包含了后缀(例如 "--log-bin[=master-bin.log]"),则后缀(".log")将会被忽略.
如果没有指定文件名,默认使用 datadir/log-basename-bin, datadir/mysql-bin 或者 datadir/mariadb-bin(如果也没有 --log-basename 选项,根据server版本的不同,会使用后两个中的一个);
datadir 是存放数据(data)的目录,由系统变量 datadir 定义.(启动参数 --datadir=path 或者 -h path);
强烈建议: 使用 --log-basename 或者指定二进制日志的文件名,以便服务器的hostname改变以后也不影响复制(replication );
存储二进制日志的目录,用于存放 各个独立的二进制日志文件,以及对这些文件的二进制日志索引(文件).
二进制日志文件的扩展名是一序列的数字.每增加一个日志文件,扩展名的数字就会增加;所以较老的日志的扩展名数字较小,最近的日志的扩展名数字最大。
每次服务器启动,就会启用一个新的二进制日志,当然扩展名也是新的;启动或停止时日志会被强制写入物理文件(平时可能存储在内存缓存中,由操作系统决定何时写入).也可以通过定义 max_binlog_size 变量来指定一个数字,当日志累增到此值就会强制写入硬盘.
二进制日志索引文件按顺序储存着所有的二进制日志文件的索引.
datadir下的文件列表示例如下:
shell> ls -l total 100 ... -rw-rw---- 1 mysql adm 2098 Apr 19 00:46 mariadb-bin.000079 -rw-rw---- 1 mysql adm 332 Apr 19 00:56 mariadb-bin.000080 -rw-rw---- 1 mysql adm 347 Apr 19 07:36 mariadb-bin.000081 -rw-rw---- 1 mysql adm 306 Apr 20 07:15 mariadb-bin.000082 -rw-rw---- 1 mysql adm 332 Apr 20 07:41 mariadb-bin.000083 -rw-rw---- 1 mysql adm 373 Apr 21 07:56 mariadb-bin.000084 -rw-rw---- 1 mysql adm 347 Apr 21 09:09 mariadb-bin.000085 -rw-rw---- 1 mysql adm 398 Apr 21 21:24 mariadb-bin.000086 -rw-rw---- 1 mysql adm 816 Apr 21 17:05 mariadb-bin.index
二进制日志index文件的名字部分默认与其他的二进制日志文件相同,而扩展名使用".index",当然,index文件的名字也可以通过" --log-bin-index[=filename] " 选项来单独指定.
具有 SUPER 权限的客户端,可以通过设置 sql_log_bin 变量,来为此次会话禁用或者再次启用二进制日志;
(sql_log_bin 是一个session变量,默认值是1,只有具有 SUPER 权限的客户端可以设置;设置为 0 则此客户端的的操作将不记入二进制日志;)
示例如下:
MariaDB [test]> SET sql_log_bin = 0; MariaDB [test]> SET sql_log_bin = 1;
二进制日志的格式
二进制日志有三种格式:
默认是 基于语句的日志(statement-based);
row-based是基于行的日志;
mix是可以混合前面两种日志的格式;
详情请参考: Binary Log Formats
MariaDB服务器所有的配置选项参见: mysqld Options (full list)
MariaDB服务器系统变量参见: Server System Variables
参考推荐:
LNMP(CentOS+Nginx+Mysql+PHP)服务器环境配置
Linux 配置 nginx、mysql、php-fpm、redis 开机启动
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2020-01-21 12:33:02
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!