CentOS6.7原始碼安裝MySQL5.6
1.原始碼安裝MySQL5.6
# CentOS6作業系統安裝完成後,預設會在/etc目錄下存在一個my.cnf, # 強制解除安裝了mysql-libs之後,my.cnf就會消失 rpm -qa | grep mysql rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64 yum -y install make gcc-c++ cmake bison-devel ncurses-devel groupadd mysql useradd -g mysql mysql -M -s /sbin/nologin mkdir -p /server/tools cd /server/tools wget http://cdn.mysql.com//archives/mysql-5.6/mysql-5.6.21.tar.gz tar xf mysql-5.6.21.tar.gz mv /server/tools/mysql-5.6.21 /opt/mysql-5.6.21/ ln -s /opt/mysql-5.6.21/ /application/mysql cd /application/mysql/ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/data/mysql/data \ -DSYSCONFDIR=/usr/local/mysql -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/usr/local/mysql/var/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 make && make install CMake Warning: Manually-specified variables were not used by the project: WITH_READLINE WITH_MEMORY_STORAGE_ENGINE CMake Warning手動指定的變數未被專案使用,在這裡倒沒什麼事
目錄說明:
a.安裝完成後不會生成配置檔案,不會給你建立/usr/local/mysql/var/目錄,
不會給你建立/data/mysql/data,這些都需要手動建立;
b./opt/mysql-5.6.21/是解壓目錄;
c.-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/是所有配置檔案存放目錄;
d.-DMYSQL_DATADIR=/data/mysql/data/是資料及日誌存放目錄;
e.-DSYSCONFDIR=/usr/local/mysql是my.cnf存放目錄;
f.-DMYSQL_UNIX_ADDR是socket存放目錄.
2.配置並啟動
mkdir -p /data/mysql/data mkdir -p /usr/local/mysql/var chown -R mysql:mysql /usr/local/mysql chown -R mysql:mysql /data/mysql/data cd /usr/local/mysql # 如果不小心刪除了這個資料目錄或這個目錄下的檔案被誤操作刪除了,可以利用這個命令重新初始化 ./scripts/mysql_install_db --basedir=/usr/local/mysql \ --datadir=/data/mysql/data --user=mysql cp support-files/mysql.server /etc/init.d/mysqld chkconfig mysqld on echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile source /etc/profile
my.cnf
cat > /usr/local/mysql/my.cnf << EOF [client] port = 3306 socket = /usr/local/mysql/var/mysql.sock [mysqld] port = 3306 socket = /usr/local/mysql/var/mysql.sock basedir = /usr/local/mysql datadir = /data/mysql/data pid-file = /data/mysql/data/mysql.pid user = mysql bind-address = 0.0.0.0 server-id = 1 sync_binlog=1 log_bin = mysql-bin skip-name-resolve #skip-networking back_log = 600 max_connections = 3000 max_connect_errors = 3000 ##open_files_limit = 65535 table_open_cache = 512 max_allowed_packet = 16M binlog_cache_size = 16M max_heap_table_size = 16M tmp_table_size = 256M read_buffer_size = 1024M read_rnd_buffer_size = 1024M sort_buffer_size = 1024M join_buffer_size = 1024M key_buffer_size = 8192M thread_cache_size = 8 query_cache_size = 512M query_cache_limit = 1024M ft_min_word_len = 4 binlog_format = mixed expire_logs_days = 30 log_error = /data/mysql/data/mysql-error.log slow_query_log = 1 long_query_time = 1 slow_query_log_file = /data/mysql/data/mysql-slow.log performance_schema = 0 explicit_defaults_for_timestamp ##lower_case_table_names = 1 skip-external-locking default_storage_engine = InnoDB ##default-storage-engine = MyISAM innodb_file_per_table = 1 innodb_open_files = 500 innodb_buffer_pool_size = 4096M innodb_write_io_threads = 1000 innodb_read_io_threads = 1000 innodb_thread_concurrency = 8 innodb_purge_threads = 1 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 4M innodb_log_file_size = 32M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 bulk_insert_buffer_size = 8M myisam_sort_buffer_size = 8M myisam_max_sort_file_size = 2G myisam_repair_threads = 1 interactive_timeout = 28800 wait_timeout = 28800 [mysqldump] quick max_allowed_packet = 16M [myisamchk] key_buffer_size = 8M sort_buffer_size = 8M read_buffer = 4M write_buffer = 4M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES port = 3306 EOF
3.授權
# 第一次給root設定密碼 mysqladmin -u root password 'oldboy123' # 給root修改密碼 mysqladmin -uroot -poldboy123 password'oldboy123456' # 設定root使用者可以遠端訪問 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '[email protected]#' WITH GRANT OPTION; FLUSH PRIVILEGES;
4.注意事項及常見報錯
a.在啟動MySQL服務時,會按照一定次序搜尋my.cnf,先在/etc目錄下找,找不到,則會搜尋"$basedir/my.cnf", 在本例中就是 /usr/local/mysql/my.cnf,這是新版MySQL的配置檔案的預設位置; b.在CentOS 6.4版作業系統最小安裝完成後,預設會在/etc目錄下存在一個my.cnf, 需要將此檔案更名為其他的名字,如:/etc/my.cnf.bak(上面的強制解除安裝,已經把這個檔案給刪了) 否則,該檔案會干擾原始碼安裝的MySQL的正確配置,造成無法啟動; c.在使用"yum update"更新系統後,需要檢查下/etc目錄下是否會多出一個my.cnf,如果多出, 將它重新命名成別的.否則,MySQL將使用這個配置檔案啟動,可能造成無法正常啟動等問題. d.用ps -ef檢視mysql程序,出現兩條斜線是因為配置檔案中多加了一個斜線: basedir = /usr/local/mysql/ /usr/local/mysql//bin/mysqld_safe
e.登陸mysql,若是報錯如下:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
解決辦法:
mkdir /var/lib/mysql/
ln -s /usr/local/mysql/var/mysql.sock /var/lib/mysql/mysql.sock
f.如果啟動報錯:
service mysql start
Starting MySQL.Logging to '/data/mysql/data/mysql-error.log'.
mysqld_safe Directory '/usr/local/mysql/var' for UNIX socket file don't exists.
ERROR! The server quit without updating PID file (/data/mysql/data/mysql.pid).
解決辦法:
mkdir /usr/local/mysql/var chown -R mysql:mysql /usr/local/mysql service mysql start 出這個錯的原因應該是:在cmake的時候這一句---DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock 導致的,改成指向配置檔案中的就應該不會再報錯了.
5.centos7下啟動mysql時的一個報錯
service mysql start
mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log',
mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log',however file don't exists.
Create writable for user 'mysql'.The server quit without updating PID file (/data/mysql/data[FAILED]id).
該問題為mysql的一個小bug,臨時處理辦法為:直接建立一個 log-error 指定的空檔案,
並給適當的屬主、屬組許可權即可.該問題已經在版本 5.5.55, 5.6.36, 5.7.18, 8.0.1中修復.
mkdir -p /var/log/mariadb touch /var/log/mariadb/mariadb.log chown -R mysql.mysql /var/log/mariadb service mysql start ln -s /var/log/mariadb/mariadb.log /data/mysql/data/mysql-error.log /etc/init.d/mysql restart
參考部落格:http://www.cnblogs.com/kevingrace/p/6109679.html