更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn)
mysql
在咱们的生产环境中,不多一台db server就一个mysql实例,从节约成本和充分利用资源的角度出发,咱们每每会在主从环境下,对从机的db server 安装多个mysql实例,用来同步主db server的相应实例sql
mysqld_multi 的 option usage: myysqld_multi [optinos] {start|stop|report} [GNR[,GNR]..] option: start|stop |reportGNR 指的是[msyqld/N]中的 N,GNR 中不能有空格和 tab
[root@client100 mysql]# mkdir -p /home/mysql/data_3307 # 修改数据目录的属主 [root@client100 mysql]# chown mysql. -R /home/mysql/data_3307
[root@client100 mysql]# vim /etc/my.cnf [mysqld_multi] # 指定相关命令的路径 mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin # 指定用户,用于启动和关闭mysql服务[这里尽可能使用root用户,默认root用户拥有因此权限,记得在两个实例中root密码一致] user = root password = kongzhong # 指定错误日志路径 log = /usr/local/mysql/multi.log [mysqld3306] basedir =/usr/local/mysql datadir =/home/mysql/data socket = /usr/local/mysql/mysqld3306.sock pid-file = /home/mysql/data/mysql3306.pid general_log = 1 general_log_file = /home/mysql/data/mysql3306.log port =3306 server_id =100 user = mysql join_buffer_size = 128M sort_buffer_size = 2M read_rnd_buffer_size = 2M default_storage_engine = MYISAM join_buffer_size = 128M max_allowed_packet= 1M net_buffer_length= 8K skip-external-locking skip-host-cache skip-name-resolve # InnoDB innodb_buffer_pool_size = 128M innodb_log_file_size = 48M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT # MyISAM key_buffer_size = 48M character-set-server=utf8 collation-server=utf8_general_ci # LOG log_error = /home/mysql/data/mysql-error.log long_query_time = 1 slow-query-log slow_query_log_file = /home/mysql/data/mysql-slow.log # Others explicit_defaults_for_timestamp=true max_connections = 500 open_files_limit = 65535 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysqld3307] basedir =/usr/local/mysql datadir =/home/mysql/data_3307 socket = /usr/local/mysql/mysqld3307.sock pid-file = /home/mysql/data_3307/mysql3307.pid general_log = 1 general_log_file = /home/mysql/data_3307/mysql3307.log port =3307 server_id =101 user = mysql join_buffer_size = 128M sort_buffer_size = 2M read_rnd_buffer_size = 2M default_storage_engine = MYISAM join_buffer_size = 128M max_allowed_packet= 1M net_buffer_length= 8K skip-external-locking skip-host-cache skip-name-resolve # InnoDB innodb_buffer_pool_size = 128M innodb_log_file_size = 48M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT # MyISAM key_buffer_size = 48M character-set-server=utf8 collation-server=utf8_general_ci # LOG log_error = /home/mysql/data_3307/mysql-error.log long_query_time = 1 slow-query-log slow_query_log_file = /home/mysql/data_3307/mysql-slow.log # Others explicit_defaults_for_timestamp=true max_connections = 500 open_files_limit = 65535 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 进入数据库安装目录 [root@client100 mysql]# cd /usr/local/mysql/scripts/ # 执行初始化脚本,指定数据目录/用户 [root@client100 scripts]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/home/mysql/data_3307 --user=mysql
# 启动相应实例 [root@client100 ~]# mysqld_multi start 3306 [root@client100 ~]# mysqld_multi start 3307 # 使用以下命令检测 mysql 相应实例进程是否启动 [root@client100 ~]# ps -ef |grep mysql # 使用netstat 检测mysql两个实例端口是否启动[看到两个端口的监听都出现,就说明搭建正常] [root@client100 ~]# netstat -ntlp |grep mysql # 使用以下两条命令,可登录到对应实例数据库 [root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p [root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3307.sock -p # 登录后,可查看参数,查看数据存放目录,以确认是否登录本身要登录的实例 mysql> show variables like '%datadir%' # 关闭实例 [root@client100 ~]# mysqld_multi stop 3306 [root@client100 ~]# mysqld_multi stop 3307 # 若是执行以上命令,不能关闭的话,请使用如下方式关闭 [root@client100 ~]# mysqladmin -uroot -p -S /usr/local/mysql/mysqld3307.sock shutdown [root@client100 ~]# mysqladmin -uroot -p -S /usr/local/mysql/mysqld3306.sock shutdown ## 有的朋友可能在使用 mysqld_multi stop 关闭时,始终有实例关闭不了,这里就是/etc/my.cnf中user/password的做用 ## 须要作以下操做: ## 若是你指定的用户不是root用户,那最好拥有mysql的全部目录权限,否则会报权限不够,因此建议用mysql或root用户 ## 若是是root用户,由于root拥有全部权限,因此只要设置两个实例的密码都是同样的就行 ## 而对于mysql,则编译安装时,建立用户是就要容许此用户登陆,即不要加nologin限制 ## 并登陆到实例数据库后,授予shutdown权限,设置密码 mysql> GRANT SHUTDOWN ON *.* TO 'mysql'@'localhost' IDENTIFIED BY 'kongzhong'; mysql> flush privileges ## 如今再用 mysqld_multi stop 关闭,就可正常关闭[仍是那句,建议用root]