centos 6x系统下源码安装mysql操作记录

在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的。mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配。
可以通过源码安装的方式,自定义安装自己所需版本的mysql。
---------------------------------------------------------------------------------------------------------------------------------
mysql数据库yum在线安装:
[root@host-test-huanqiu ~]# yum -y install mysql mysql-server
[root@host-test-huanqiu ~]# /etc/init.d/mysqld start
[root@host-test-huanqiu ~]# mysqladmin password "123456"
[root@host-test-huanqiu ~]# mysql -p123456
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.1.73 |
+-----------+
1 row in set (0.00 sec
---------------------------------------------------------------------------------------------------------------------------------
废话不多说,以下是centos6x系统下源码安装Mysql的操作记录,方便参考~

1、卸载旧版本
[root@host-test-huanqiu ~]# rpm -qa | grep mysql
mysql-5.1.73-7.el6.x86_64
mysql-libs-5.1.73-7.el6.x86_64
mysql-server-5.1.73-7.el6.x86_64

#普通删除模式
[root@host-test-huanqiu ~]# rpm -e mysql-5.1.73-7.el6.x86_64 mysql-libs-5.1.73-7.el6.x86_64 mysql-server-5.1.73-7.el6.x86_64 
# 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除 
[root@host-test-huanqiu ~]# rpm -e --nodeps mysql-5.1.73-7.el6.x86_64 mysql-libs-5.1.73-7.el6.x86_64 mysql-server-5.1.73-7.el6.x86_64

#删除/etc/my.cnf 
[root@host-test-huanqiu ~]# rm /etc/my.cnf

2、安装编译代码需要的包
[root@host-test-huanqiu ~]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel

3、创建mysql用户,不建立mysql用户家目录(加-M参数),也就是禁用mysql账号登陆系统 
[root@host-test-huanqiu ~]# groupadd mysql 
[root@host-test-huanqiu ~]# useradd -g mysql mysql -M -s /sbin/nologin

4、下载MySQL,源码编译安装

[plain]  view plain  copy
  1. [root@host-test-huanqiu ~]# cd /usr/local/src  
  2. [root@host-test-huanqiu src]# wget -c http://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.6/mysql-5.6.34.tar.gz  
  3.    
  4. [root@host-test-huanqiu src]# tar -zxvf mysql-5.6.34.tar.gz  
  5. [root@host-test-huanqiu src]# cd mysql-5.6.34/  
  6. [root@host-test-huanqiu mysql-5.6.34]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  
  7. [root@host-test-huanqiu mysql-5.6.34]# make && make install  

5、配置MySQL

[plain]  view plain  copy
  1. 修改/usr/local/mysql权限  
  2. [root@host-test-huanqiu mysql-5.6.34]# mkdir -p /data/mysql/data  
  3. [root@host-test-huanqiu mysql-5.6.34]# chown -R mysql:mysql /usr/local/mysql  
  4. [root@host-test-huanqiu mysql-5.6.34]# chown -R mysql:mysql /data/mysql/data  
  5.    
  6. 执行初始化配置脚本,创建系统自带的数据库和表  
  7. [root@host-test-huanqiu mysql-5.6.34]# cd /usr/local/mysql  
  8. [root@host-test-huanqiu mysql]# ./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql   //如果后续不小心删除了这个数据目录或这个目录下的文件被误操作删除了,还可以利用这个命令重新初始化  

需要特别注意:
在启动MySQL服务时,会按照一定次序搜索my.cnf,先在/etc目录下找,找不到则会搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,这是新版MySQL的配置文件的默认位置!

另外:
在CentOS 6.4版操作系统最小安装完成后,默认会在/etc目录下存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。
在使用"yum update"更新系统后,需要检查下/etc目录下是否会多出一个my.cnf,如果多出,将它重命名成别的。否则,MySQL将使用这个配置文件启动,可能造成无法正常启动等问题。
--------------------------------------------------------------------------------------------------------------------------------------------------------------

启动MySQL
添加服务,拷贝服务脚本到init.d目录,并设置开机启动
[root@host-test-huanqiu mysql]# cp support-files/mysql.server /etc/init.d/mysql
[root@host-test-huanqiu mysql]# chkconfig mysql on
[root@host-test-huanqiu mysql]# service mysql start   //启动前,要先配置my.cnf文件(如下), 并确保/data/mysql/data和/usr/local/mysql的mysql权限

[plain]  view plain  copy
  1. <span style="color:#333333;">如果启动报错:  
  2. [root@slave-server mysql]# service mysql start  
  3. Starting MySQL.Logging to '/data/mysql/data/mysql-error.log'.  
  4. 170416 12:55:28 mysqld_safe Directory '/usr/local/mysql/var' for UNIX socket file don't exists.  
  5.  ERROR! The server quit without updating PID file (/data/mysql/data/mysql.pid).  
  6.    
  7. 解决办法:  
  8. [root@slave-server mysql]# mkdir /usr/local/mysql/var  
  9. [root@slave-server mysql]# chown -R mysql:mysql /usr/local/mysql  
  10. [root@slave-server mysql]# service mysql start  
  11. Starting MySQL.. SUCCESS!</span>  

配置用户和环境变量

[plain]  view plain  copy
  1. MySQL启动成功后,root默认没有密码,需要设置root密码,设置之前,需要先设置PATH,否则不能直接调用mysql  
  2. 修改/etc/profile文件,在文件末尾添加  
  3. [root@host-test-huanqiu mysql]# vim /etc/profile  
  4. ........  
  5. export PATH=$PATH:/usr/local/mysql/bin  
  6. [root@host-test-huanqiu mysql]# source /etc/profile  
  7.    
  8. 到此,就可以直接mysql登陆了  
  9. [root@host-test-huanqiu mysql]# mysql -uroot  
  10. .......  
  11. mysql> select version();  
  12. +-----------+  
  13. | version() |  
  14. +-----------+  
  15. | 5.6.33 |  
  16. +-----------+  
  17. 1 row in set (0.00 sec)  

登陆mysql,若是报错如下:

[plain]  view plain  copy
  1. [root@test2-235 mysql]# mysql  
  2. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)  
  3.    
  4. 解决办法  
  5. [root@test2-235 mysql]# mkdir /var/lib/mysql/  
  6. [root@test2-235 mysql]# ln -s /usr/local/mysql/var/mysql.sock /var/lib/mysql/mysql.sock  

修改root密码,执行命令如下

[plain]  view plain  copy
  1. mysql> SET PASSWORD = PASSWORD('123456');  
  2.    
  3. 若要设置root用户可以远程访问,执行  
  4. mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;  
  5. 使授权立即生效  
  6. mysql> FLUSH PRIVILEGES;  
  7.    
  8. 也可以使用mysqladmin命令设置mysql密码  
  9. [root@host-test-huanqiu mysql]# mysqladmin password 123456 #安装mysql后第一次设置密码  
  10. [root@host-test-huanqiu mysql]# mysqladmin -p 旧密码 password 新密码 #重置密码  

最后配置防火墙

[plain]  view plain  copy
  1. 默认防火墙的3306端口默认没有开启,若要远程访问,需要开启这个端口.也可以做下白名单,比如只允许192.168.1.0/24网段的客户机访问本机的mysql。  
  2. [root@host-test-huanqiu mysql]# vim /etc/sysconfig/iptables  
  3. .......  
  4. -A INPUT -s 192.168.1.0/24 -p tcp -m tcp -m state --state NEW -dport 3306 -j ACCEPT  

----------------------------------------------------------------------------------------------------------------------------------
下面贴下mysql6.x的my.cnf配置

[plain]  view plain  copy
  1. <span style="color:#333333;">[client]  
  2. port = 3306  
  3. socket = /usr/local/mysql/var/mysql.sock  
  4.    
  5. [mysqld]  
  6. port = 3306  
  7. socket = /usr/local/mysql/var/mysql.sock  
  8.    
  9. basedir = /usr/local/mysql/  
  10. datadir = /data/mysql/data  
  11. pid-file = /data/mysql/data/mysql.pid  
  12. user = mysql  
  13. bind-address = 0.0.0.0  
  14. server-id = 1  
  15. sync_binlog=1  
  16. log_bin = mysql-bin  
  17.    
  18. skip-name-resolve  
  19.    
  20. back_log = 600  
  21.    
  22. max_connections = 3000  
  23. max_connect_errors = 3000  
  24.    
  25. table_open_cache = 512  
  26. max_allowed_packet = 16M  
  27. binlog_cache_size = 16M  
  28. max_heap_table_size = 16M  
  29. tmp_table_size = 256M  
  30.    
  31. read_buffer_size = 1024M  
  32. read_rnd_buffer_size = 1024M  
  33. sort_buffer_size = 1024M  
  34. join_buffer_size = 1024M  
  35. key_buffer_size = 8192M  
  36.    
  37. thread_cache_size = 8  
  38.    
  39. query_cache_size = 512M  
  40. query_cache_limit = 1024M  
  41.    
  42. ft_min_word_len = 4  
  43.    
  44. binlog_format = mixed  
  45. expire_logs_days = 30  
  46.    
  47. log_error = /data/mysql/data/mysql-error.log  
  48. slow_query_log = 1  
  49. long_query_time = 1  
  50. slow_query_log_file = /data/mysql/data/mysql-slow.log  
  51.    
  52. performance_schema = 0  
  53. explicit_defaults_for_timestamp  
  54.    
  55. skip-external-locking  
  56.    
  57. default_storage_engine = InnoDB  
  58. innodb_file_per_table = 1  
  59. innodb_open_files = 500  
  60. innodb_buffer_pool_size = 1024M  
  61. innodb_write_io_threads = 1000  
  62. innodb_read_io_threads = 1000  
  63. innodb_thread_concurrency = 8  
  64. innodb_purge_threads = 1  
  65. innodb_flush_log_at_trx_commit = 2  
  66. innodb_log_buffer_size = 4M  
  67. innodb_log_file_size = 32M  
  68. innodb_log_files_in_group = 3  
  69. innodb_max_dirty_pages_pct = 90  
  70. innodb_lock_wait_timeout = 120  
  71.    
  72. bulk_insert_buffer_size = 8M  
  73. myisam_sort_buffer_size = 8M  
  74. myisam_max_sort_file_size = 10G  
  75. myisam_repair_threads = 1  
  76.    
  77. interactive_timeout = 28800  
  78. wait_timeout = 28800  
  79.    
  80. [mysqldump]  
  81. quick  
  82. max_allowed_packet = 16M  
  83.    
  84. [myisamchk]  
  85. key_buffer_size = 8M  
  86. sort_buffer_size = 8M  
  87. read_buffer = 4M  
  88. write_buffer = 4M  
  89.    
  90. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  
  91. port = 3306</span>  

针对上面的部署过程,为了便于以后安装mysql环境,编写了下面的安装脚本,直接运行这个脚本就能自动化构建mysql环境了。
[root@slave-server ~]# cat mysqlinstall.sh                    (下载地址:https://pan.baidu.com/s/1gfEKC9d    密码:6ec3)

[plain]  view plain  copy
  1. #!/bin/bash  
  2. #卸载系统自带的Mysql  
  3. /bin/rpm -e $(/bin/rpm -qa | grep mysql|xargs) --nodeps  
  4. /bin/rm -f /etc/my.cnf  
  5.     
  6. #安装编译代码需要的包  
  7. /usr/bin/yum -y install make gcc-c++ cmake bison-devel ncurses-devel  
  8.     
  9. #编译安装mysql5.6  
  10. /usr/sbin/groupadd mysql  
  11. /usr/sbin/useradd -g mysql mysql -M -s /sbin/nologin  
  12.     
  13. cd /usr/local/src  
  14. wget -c http://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.6/mysql-5.6.37.tar.gz  
  15. /bin/tar -zxvf mysql-5.6.37.tar.gz  
  16. cd mysql-5.6.37/  
  17. /usr/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  
  18. make && make install  
  19.     
  20. #修改/usr/local/mysql权限  
  21. mkdir -p /data/mysql/data  
  22. /bin/chown -R mysql:mysql /usr/local/mysql  
  23. /bin/chown -R mysql:mysql /data/mysql/data  
  24.     
  25. #执行初始化配置脚本,创建系统自带的数据库和表  
  26. /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql  
  27.     
  28. #配置my.cnf  
  29. cat > /usr/local/mysql/my.cnf << EOF  
  30. [client]  
  31. port = 3306  
  32. socket = /usr/local/mysql/var/mysql.sock  
  33.     
  34. [mysqld]  
  35. port = 3306  
  36. socket = /usr/local/mysql/var/mysql.sock  
  37.     
  38. basedir = /usr/local/mysql/  
  39. datadir = /data/mysql/data  
  40. pid-file = /data/mysql/data/mysql.pid  
  41. user = mysql  
  42. bind-address = 0.0.0.0  
  43. server-id = 1  
  44. sync_binlog=1  
  45. log_bin = mysql-bin  
  46.     
  47. skip-name-resolve  
  48. #skip-networking  
  49. back_log = 600  
  50.     
  51. max_connections = 3000  
  52. max_connect_errors = 3000  
  53. ##open_files_limit = 65535  
  54. table_open_cache = 512  
  55. max_allowed_packet = 16M  
  56. binlog_cache_size = 16M  
  57. max_heap_table_size = 16M  
  58. tmp_table_size = 256M  
  59.     
  60. read_buffer_size = 1024M  
  61. read_rnd_buffer_size = 1024M  
  62. sort_buffer_size = 1024M  
  63. join_buffer_size = 1024M  
  64. key_buffer_size = 8192M  
  65.     
  66. thread_cache_size = 8  
  67.     
  68. query_cache_size = 512M  
  69. query_cache_limit = 1024M  
  70.     
  71. ft_min_word_len = 4  
  72.     
  73. binlog_format = mixed  
  74. expire_logs_days = 30  
  75.     
  76. log_error = /data/mysql/data/mysql-error.log  
  77. slow_query_log = 1  
  78. long_query_time = 1  
  79. slow_query_log_file = /data/mysql/data/mysql-slow.log  
  80.     
  81. performance_schema = 0  
  82. explicit_defaults_for_timestamp  
  83.     
  84. ##lower_case_table_names = 1  
  85.     
  86. skip-external-locking  
  87.     
  88. default_storage_engine = InnoDB  
  89. ##default-storage-engine = MyISAM  
  90. innodb_file_per_table = 1  
  91. innodb_open_files = 500  
  92. innodb_buffer_pool_size = 1024M  
  93. innodb_write_io_threads = 1000  
  94. innodb_read_io_threads = 1000  
  95. innodb_thread_concurrency = 8  
  96. innodb_purge_threads = 1  
  97. innodb_flush_log_at_trx_commit = 2  
  98. innodb_log_buffer_size = 4M  
  99. innodb_log_file_size = 32M  
  100. innodb_log_files_in_group = 3  
  101. innodb_max_dirty_pages_pct = 90  
  102. innodb_lock_wait_timeout = 120  
  103.     
  104. bulk_insert_buffer_size = 8M  
  105. myisam_sort_buffer_size = 8M  
  106. myisam_max_sort_file_size = 10G  
  107. myisam_repair_threads = 1  
  108.     
  109. interactive_timeout = 28800  
  110. wait_timeout = 28800  
  111.     
  112. [mysqldump]  
  113. quick  
  114. max_allowed_packet = 16M  
  115.     
  116. [myisamchk]  
  117. key_buffer_size = 8M  
  118. sort_buffer_size = 8M  
  119. read_buffer = 4M  
  120. write_buffer = 4M  
  121.     
  122. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  
  123. port = 3306  
  124. EOF  
  125.     
  126. #启动mysql服务  
  127. cd /usr/local/mysql  
  128. /bin/mkdir var  
  129. /bin/chown -R mysql.mysql var  
  130. cp support-files/mysql.server /etc/init.d/mysql  
  131. /sbin/chkconfig mysql on  
  132. service mysql start  
  133.     
  134. #设置环境变量  
  135. echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile  
  136. source /etc/profile  
  137.     
  138. #设置mysql登陆密码,初始密码为123456  
  139. /bin/mkdir -p /var/lib/mysql  
  140. ln -s /usr/local/mysql/var/mysql.sock /var/lib/mysql/mysql.sock  
  141. mysql -e "SET PASSWORD = PASSWORD('123456');"  
  142. mysql -p123456 -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;"  
  143. mysql -p123456 -e "FLUSH PRIVILEGES;"  

猜你喜欢

转载自blog.csdn.net/shangyuanlang/article/details/80797085