MariaDB编译与安装

安装依赖:

yum -y install cmake bison bison-devel gcc gcc-c++ autoconf zlib zlib-devel libxml2 libxml2-devel ncurses-devel libtool-ltdl libtool-ltdl-devel make 

建立mysql用户:

groupadd mysql
useradd -r -g mysql mysql

编译:

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/usr/local/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8mb4 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DWITH_DEBUG=0
make -j 4 && make install
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
chown -R mysql /usr/local/mysql/.
chgrp -R mysql /usr/local/mysql/.
cd /usr/local/mysql
chmod +x scripts/mysql_install_db
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --collation-server=utf8_general_ci
chown -R root /usr/local/mysql/.
chown -R mysql /usr/local/mysql/data
cp ./support-files/my-huge.cnf /usr/local/mysql/my.cnf
cp ./support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 345 mysqld on

编辑mysql的配置文件
vi /usr/local/mysql/my.cnf,在[mysqld]标签里面加入:datadir=/usr/local/mysql/data
启动
service mysqld start
连接
mysql -uroot -proot@Mysql

本来就应该是这样了,但是测试环境本身存在一个mysql5.5,于是灾难就开始了
一切根源其实在于默认的配置文件,确切的说是路径问题,首先编译安装时要指定不同的目录

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/maria -DSYSCONFDIR=/usr/local/maria -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8mb4 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DWITH_DEBUG=0
make -j 4 && make install

安装完成后修改 my.cnf 配置文件
port 和 socket 自然要修改,最好也指定一下 datadir

然后是修改服务脚本

cp ./support-files/mysql.server /etc/init.d/mariad

进入以后修改datadir和basedir并不会改变 my.cnf 的加载位置,一劳永逸的方法是在’start’)下面的mysqld_safe直接添加启动参数–defaults-file=/usr/local/maria/my.cnf
而且几乎每一项mysql的程序操作都要指定配置文件,否则会使用 /etc/my.cnf 配置文件造成冲突,严重的可能损毁数据库
然后是初始化数据库也要指定 –defaults-file=/usr/local/maria/my.cnf参数

最严重的一个问题,连接maria时一定要看下连接到的是哪台数据库,test环境亲测./mysql -P2206 -uroot -p 连接上的却是原本的mysql数据库而非maria数据库,测试环境就是卡在这里了好久,一个简单的方法就是其实进入控制台后查看前缀是 MySQL [(none)]> 还是 MariaDB [(none)]>

关于./mysql -P2206 -uroot -p 连接上的是原本的mysql数据库而非maria数据库的原因是:
linux上面mysql存在两种连接方式,一种是TCP/IP ,另一种是 socket 方式。
socket 方式性能更好但只允许本机访问,所以为了安全mysql和Maria推荐这种方式连接本机,具体到命令上就是
./mysql 不指定IP地址或者 localhost 的话,默认以 socket 方式连接,只有指定了IP地址才以 TCP/IP 方式连接。
而这里有一个坑,./mysql 默认使用 /etc/my.cnf 配置文件,所以执行 ./mysql -P2206 的时候实际是忽略端口,进而使用socket方式连接的,而因为默认加载的是 /etc/my.cnf 所以使用原来 mysql 的socket也就不为怪了。
所以要连接 maria 数据库有两种方法:
1、指定配置文件,./mysql –defaults-file=/usr/local/maria/my.cnf
2、指定 socket 文件,./mysql -S /tmp/maria.sock

另外mariadb 10 也不再支持log-slow-queries,改为slow-query-log-file

其它编译参数

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mydata/data/ \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STPRAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWIYH_READLINE=1 \
-DWIYH_SSL=system \
-DVITH_ZLIB=system \
-DWITH_LOBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8_general_ci

cmake . -DMYSQL_UNIX_ADDR=/tmp/mariadb.sock \
-DSYSCONFDIR=/home/local/mariadb \
-DMYSQL_TCP_PORT=3309 \
-DEXTRA_CHARSETS=all \
-DMYSQL_USER=mariadb \
-DCMAKE_INSTALL_PREFIX=/home/local/mariadb \
-DMYSQL_DATADIR=/home/data/mariadb \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_FEDERATEDX_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STPRAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWIYH_READLINE=1 \
-DWIYH_SSL=system \
-DVITH_ZLIB=system \
-DWITH_LOBWRAP=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8_general_ci

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注