欢迎投稿

今日深度:

【mysql】yum安装的MariaDB多实例安装实践(新增实例),yummariadb

【mysql】yum安装的MariaDB多实例安装实践(新增实例),yummariadb


作者:lianghc

     在yum安装MariaDB后,有一个实例在使用中,现在想新增一个实例,一般的教程都是在安装mysql的时候直接一次性装好多个实例,那如何新增一个实例并保留原来的实例呢?

在创建多实例之前,先搞清楚yum安装好的mariadb的目录结构:
1、数据库目录
/var/lib/mysql/
2、配置文件
/usr/share/mysql(mysql.server命令及配置文件)mysql5.5之后的默认安装路径,mysql5.5之前的是/usr/local/mysql
3、相关命令
/usr/bin(mysqladmin mysqldump等命令)
4、启动脚本
/etc/rc.d/init.d/(启动脚本文件mysql的目录)

此时启动,关闭mysql 可以用:
/etc/init.d/mysql start/stop

service mariadb start/stop


一般的安装多实例基本步骤总结(参考http://blog.csdn.net/permike/article/details/51957003 博文):

1. 新建数据目录
2. 创建用户,给数据目录授权(最好不要再已经存在的其他用户下创建数据目录)
3. 初始化数据库
4. 创建配置文件

5. 创建自动启动文件

(备注:创建启动文件这一步可有可无,因为可以通过命令来搞定 mysqld_safe --defaults-file=/data/dbdata_${mysql_port}/my.cnf 2>&1 > /dev/null & )


接下来列出我的实践步骤:

在/home目录下创建multimysql文件夹
[root@ddw ~]# mkdir /home/multimysql 
在里面创建etc,socket,bin,datadir这四个文件夹备用                   
[root@ddw ~]# mkdir /home/multimysql/{etc,socket,bin,datadir}
#在datadir中新增一个实例的数据文件:3307    
[root@ddw ~]# mkdir /home/multimysql/datadir/3307
对/home/multimysql进行递归授权防止之后的操作出现权限不够的情况,否则容易出现错误:[ERROR] mysqld: Can't create/write to file '/opt/userhome/icwork/multimysql/datadir3307/aria_log_control' (Errcode: 13 "Permission denied")
[root@ddw ~]# chmod -R 777 /home/multimysql/             
[root@ddw ~]# chown -R mysql:mysql /home/multimysql/
用mysql_install_db来生成即将使用的多个实例的数据文件
[root@ddw ~]# mysql_install_db --basedir=/usr --datadir=/home/multimysql/datadir/3307 --user=mysql
1、basedir 参数
原文说明为:
Path to installation directory. All paths are usually resolved relative to this.
解释:
该参数指定了安装 MySQL 的安装路径,填写全路径可以解决相对路径所造成的问题。
2、datadir 参数
原文说明为:
Path to the database root
解释:
该参数指定了 MySQL 的数据库文件放在什么路径下。数据库文件即我们常说的 MySQL data 文件。
如果不知道--basedir该怎么填,可以登录进mysql后查询:
    MariaDB [(none)]> show variables like '%basedir%';  
    +---------------+-------+  
    | Variable_name | Value |  
    +---------------+-------+  
    | basedir     | /usr |  
    +---------------+-------+  
    1 row in set (0.00 sec)  
3、user是指mysql实例将使用的在linux系统中的用户,最好命名为mysql,yum安装后一般都有这个用户,如果没有可以自主创建:
groupadd mysql  
adduser -g mysql mysql  
如果mysql_install_db 过程有错误,还需要针对不同的错误自行搜索处理。

接下来创建多实例的配置文件:
先创建一个公用配置文件(此文件为mysql常见的my.cnf 配置文件,可以按需修改):

mkdir /home/multimysql/etc/my.cnf.d/  
vim /home/multimysql/etc/my.cnf.d/my.cnf  

[mysqld]  
skip-name-resolve  
lower_case_table_names=1  
innodb_file_per_table=1  
back_log = 50  
max_connections = 300  
max_connect_errors = 1000  
table_open_cache = 2048  
max_allowed_packet = 16M  
binlog_cache_size = 2M  
max_heap_table_size = 64M  
sort_buffer_size = 2M  
join_buffer_size = 2M  
thread_cache_size = 64  
thread_concurrency = 8  
query_cache_size = 64M  
query_cache_limit = 2M  
ft_min_word_len = 4  
default-storage-engine = innodb  
thread_stack = 192K  
transaction_isolation = REPEATABLE-READ  
tmp_table_size = 64M  
log-bin=mysql-bin  
binlog_format=mixed  
slow_query_log  
long_query_time = 1  
server-id = 1  
key_buffer_size = 8M  
read_buffer_size = 2M  
read_rnd_buffer_size = 2M  
bulk_insert_buffer_size = 64M  
myisam_sort_buffer_size = 128M  
myisam_max_sort_file_size = 10G  
myisam_repair_threads = 1  
myisam_recover  
innodb_additional_mem_pool_size = 16M  
innodb_buffer_pool_size = 200M  
innodb_data_file_path = ibdata1:10M:autoextend  
innodb_file_io_threads = 8  
innodb_thread_concurrency = 16  
innodb_flush_log_at_trx_commit = 1  
innodb_log_buffer_size = 16M  
innodb_log_file_size = 512M  
innodb_log_files_in_group = 3  
innodb_max_dirty_pages_pct = 60  
innodb_lock_wait_timeout = 120  
[mysqldump]  
quick  
max_allowed_packet = 256M  
[mysql]  
no-auto-rehash  
prompt=\\u@\\d \\R:\\m>  
[myisamchk]  
key_buffer_size = 512M  
sort_buffer_size = 512M  
read_buffer = 8M  
write_buffer = 8M  
[mysqlhotcopy]  
interactive-timeout  
[mysqld_safe]  
open-files-limit = 8192 


然后分别创建新增的实例的配置文件(如果新增多个实例,则创建多个配置文件,可参考:http://blog.csdn.net/poklau/article/details/54951798):
[root@ddw ~]# vim 3307.cnf   
[client]  
port = 3307  
socket = /home/multimysql/socket/mysql3307.sock  
[mysqld]  
datadir=/home/multimysql/datadir/3307  
port = 3307  
socket = /home/multimysql/socket/mysql3307.sock  

!includedir /home/multimysql/etc/my.cnf.d 
在配置文件中,port是实例的端口,socket是实例运行时的sock文件,datadir是之前我们生成的数据库文件位置。

至此新增实例基本配置完成,后面创建启动关闭脚本是为了管理方便而创建的,可以根据自己的需要修改

然后我们来编辑三个启动脚本:

vim /home/multimysql/bin/mysql3307 

#!/bin/bash  
mysql_port=3307  
mysql_username="root"  
mysql_password=""  
function_start_mysql()  
{  
printf "Starting MySQL...\n"  
mysqld_safe --defaults-file=/home/multimysql/etc/${mysql_port}.cnf 2>&1 > /dev/null &  
}  
function_stop_mysql()  
{  
printf "Stoping MySQL...\n"  
mysqladmin -u ${mysql_username} -p${mysql_password} -S /home/multimysql/socket/mysql${mysql_port}.sock shutdown  
}  
function_restart_mysql()  
{  
printf "Restarting MySQL...\n"  
function_stop_mysql  
function_start_mysql  
}  
function_kill_mysql()  
{  
kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')  
kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')  
}  
case $1 in  
start)  
function_start_mysql;;  
stop)  
function_stop_mysql;;  
kill)  
function_kill_mysql;;  
restart)  
function_stop_mysql  
function_start_mysql;;  
*)  
echo "Usage: /data/dbdata_${mysql_port}/mysqld {start|stop|restart|kill}";;  
esac  

因为是yum安装,所以mysqld_safe和mysqladmin可以不用加路径直接运行,另外mysql_port是指这个bash简要打开的实例的端口,mysql_username和mysql_userpassword为我们即将在实例中配置的可关闭mysql进程的mysql用户名和密码(目前无密码,后续创建了密码需要写进去)。

现在给bash文件权限来执行,并尝试打开实例:
chmod 777 /home/multimysql/bin/mysql3307 
先关闭yum安装的默认mysql实例进程:
sudo service mariadb stop  
启动实例:
/home/multimysql/bin/mysql3307 start
查看是否有mysql 3307的进程:
[root@ddw my.cnf.d]#  ps -ef | grep mysql
root     25365  1252  0 14:46 ?        00:00:00 sshd: mysql [priv]
mysql    25371 25365  0 14:47 ?        00:00:00 sshd: mysql
root     35730  1252  0 15:29 ?        00:00:00 sshd: mysql [priv]
mysql    35750 35730  0 15:29 ?        00:00:00 sshd: mysql
root     37796     1  0 15:36 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/home/multimysql/etc/3307.cnf
mysql    37877 37796  0 15:36 pts/0    00:00:00 /usr/sbin/mysqld --defaults-file=/home/multimysql/etc/3307.cnf --basedir=/usr --datadir=/home/multimysql/datadir/3307 --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/home/multimysql/datadir/3307/ddw.err --pid-file=ddw.pid --socket=/home/multimysql/socket/mysql3307.sock --port=3307
root     38610  6913  0 15:38 pts/0    00:00:00 grep --color=auto mysql

可以看到实例已经启动,我们来尝试连接实例的sock,并创建登陆密码:
[root@ddw my.cnf.d]# mysql -u root -S /home/multimysql/socket/mysql3307.sock
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.18-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)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> grant all privileges on *.* to 'root'@'%' identified by '1234567' with grant option;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)
解释一下这两句sql的意思:
grant是权限授予,all privileges表示授予所有权限,on表示授予的操作对象,*.*表示所有数据库的所有表,to表示授予的对象‘root’@'%'表示任意主机的root登录用户,identified by '1234567'表示设置密码为1234567。
flush privileges表示刷新用户权限,不刷新的话权限是不会立刻生效的。

此新增的实例已经成功启动,而以前yum安装的实例直接启动就好了
[root@ddw my.cnf.d]# /etc/init.d/mysql start
Starting mysql (via systemctl):                            [  OK  ]

查看是否启动成功
[root@ddw my.cnf.d]#  ps -ef | grep mysql
root     25365  1252  0 14:46 ?        00:00:00 sshd: mysql [priv]
mysql    25371 25365  0 14:47 ?        00:00:00 sshd: mysql
root     35730  1252  0 15:29 ?        00:00:00 sshd: mysql [priv]
mysql    35750 35730  0 15:29 ?        00:00:00 sshd: mysql
root     37796     1  0 15:36 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/home/multimysql/etc/3307.cnf
mysql    37877 37796  0 15:36 pts/0    00:00:00 /usr/sbin/mysqld --defaults-file=/home/multimysql/etc/3307.cnf --basedir=/usr --datadir=/home/multimysql/datadir/3307 --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/home/multimysql/datadir/3307/ddw.err --pid-file=ddw.pid --socket=/home/multimysql/socket/mysql3307.sock --port=3307
mysql    39321     1  0 15:41 ?        00:00:00 /usr/sbin/mysqld                      # 这个就是默认的实例
root     39560  6913  0 15:42 pts/0    00:00:00 grep --color=auto mysql
也可以看看多实例的端口
[root@ddw my.cnf.d]# netstat -tunlp |grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      39321/mysqld        
tcp6       0      0 :::3307                 :::*                    LISTEN      37877/mysqld
ok! 一些正常。


www.htsjk.Com true http://www.htsjk.com/mariadb/35986.html NewsArticle 【mysql】yum安装的MariaDB多实例安装实践(新增实例),yummariadb 作者:lianghc      在yum安装MariaDB后,有一个实例在使用中,现在想新增一个实例,一般的教程都是在安装mysql的时候直接...
相关文章
    暂无相关文章
评论暂时关闭