I'd like to have my PHP applications such as Joomla make use of the UNIX socket to connect to the local mysql database.
I've already configured the php.ini with:
mysqli.default_socket = /var/run/mysqld/mysqld.sock
mysql.default_socket = /var/run/mysqld/mysqld.sock
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
But in Joomla I can only set localhost or 127.0.0.1 as database, is it possible to override this? How can I test the UNIX socket is actually being used?
My MySQL/MariaDB is configured like:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
skip-external-locking
bind-address = 127.0.0.1
max_connections = 500
connect_timeout = 10
wait_timeout = 600
max_allowed_packet = 16M
thread_cache_size = 1000
sort_buffer_size = 512M
bulk_insert_buffer_size = 16M
tmp_table_size = 8G
max_heap_table_size = 8G
myisam_recover = FORCE,BACKUP
key_buffer_size = 128M
open-files-limit = 65535
table_open_cache = 10240
table_open_cache_instances = 8
table-definition-cache = 4096
myisam_sort_buffer_size = 512M
key-cache-segments=8
concurrent_insert = 2
read_buffer_size = 32M
read_rnd_buffer_size = 64M
query_cache_limit = 96M
query_cache_size = 128M
query_cache_min_res_unit=7108
query_cache_type = 1
log_warnings = 2
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 10
log_slow_verbosity = query_plan
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
sync_binlog = 1
expire_logs_days = 14
max_binlog_size = 100M
default_storage_engine = InnoDB
innodb_log_file_size = 50M
innodb_buffer_pool_size = 6G
innodb_buffer_pool_instances=8
innodb_log_buffer_size = 32M
innodb_file_per_table = 1
innodb_concurrency_tickets=5000
innodb_open_files = 240000
innodb_io_capacity = 240000
innodb_flush_method = O_DIRECT
innodb-log-files-in-group = 2
innodb-flush-log-at-trx-commit = 1
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 512M
!includedir /etc/mysql/conf.d/
127.0.0.1 is used for TCP socket.
'localhost' is used for Unix filesystem socket.
We can use
netstat -ln | grep 'mysql'
to determine the connection method.And explore option to enforce a particular typeThe connection parameters should be like this
$link = mysql_connect('localhost:/var/run/mysqld/mysqld.sock', 'mysql_user', 'mysql_password');
In libraries/joomla/database/database.php is defined the abstract class JDatabase, which then is implemented for different database types in libraries/joomla/database/driver/, in this case mysql or mysqli..
In mysqli.php (Joomla! 3.3.6) __construct($options) sets defaults if nothing specified in configuration.php, which will change it into 'localhost'. From line 64:
Then, function connect(), finally uses them to create connection on lines 163-165:
If nothing else given, mysqli_connect() uses defaults from php.ini for hostname, port and socket
Now you know the whole track affecting these connection parameters. By editing mysqli.php you should be able to enforce settings the configuration.php doesn't allow you to change. However, you should be careful and consider documenting these modifications well, since